这里介绍一下,这个工具类不是在分布式环境下来用的,就是我们平常使用的,单机状况下,为什么博主开头要这样强调呢?因为,之前见网上有些博友有这样封装的,也有RedisShardedPoolUtil 封装的 ,刚开始不是很明白,现在知道了,后者是在分布式的场景下使用的。好啦。现在让我们来code了~~~~

首先来大致介绍下吧,redis的工具类很简单,就是先创建一个redis连接池(引入第三方的jar包就行),像数据库连接池一样,然后,需要的参数写在配置文件中,创建连接池这个类  RedisPool.java   需要两个方法,一个从连接池得到资源redis,一个是放回redis资源。

然后,再写一个专门操控redis的  ‘增删改查’  方法。这就可以。 不多说,老规矩,开箱即用。上代码!!!

pom.xml
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!--加速开发的工具,可以省略getset和日志类,只需要注解就可以-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.1</version>
</dependency>
</dependencies>
RedisPool.java
这里强调一下,redis的pom是2.9 所以回收资源是close方法,之前的pool.returnBrokenResource(jedis);
和pool.returnResource(jedis);已经被官方弃用了。这点注意。
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; /**
* Created by 敲代码的卡卡罗特
*/
@Slf4j
public class RedisPool {
private static JedisPool pool;//jedis连接池
private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20")); //最大连接数
private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","20"));//在jedispool中最大的idle状态(空闲的)的jedis实例的个数
private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","20"));//在jedispool中最小的idle状态(空闲的)的jedis实例的个数 private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borrow一个jedis实例的时候,是否要进行验证操作,如果赋值true。则得到的jedis实例肯定是可以用的。
private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果赋值true。则放回jedispool的jedis实例肯定是可以用的。 private static String redisIp = PropertiesUtil.getProperty("redis1.ip");
private static Integer redisPort = Integer.parseInt(PropertiesUtil.getProperty("redis1.port")); private static void initPool(){
JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle); config.setTestOnBorrow(testOnBorrow);
config.setTestOnReturn(testOnReturn); config.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认为true。 pool = new JedisPool(config,redisIp,redisPort,1000*2);
} static{
initPool();
} public static Jedis getJedis(){
return pool.getResource();
} public static void close(Jedis jedis){
try {
if (jedis != null) {
jedis.close();
}
} catch (Exception e) {
log.error("return redis resource exception", e);
}
} public static void main(String[] args) {
Jedis jedis = pool.getResource();
jedis.set("lzh","liuzhonghua");
close(jedis); pool.destroy();//临时调用,销毁连接池中的所有连接
System.out.println("program is end"); } }

RedisPoolUtil.java   代码很简单  方法就不一一介绍了。看不懂的留言问我
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis; /**
* Created by 敲代码的卡卡罗特
*/
@Slf4j
public class RedisPoolUtil { /**
* 设置key的有效期,单位是秒
* @param key
* @param exTime
* @return
*/
public static Long expire(String key,int exTime){
Jedis jedis = null;
Long result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.expire(key,exTime);
} catch (Exception e) {
log.error("expire key:{} error",key,e);
RedisPool.close(jedis);
return result;
}
RedisPool.close(jedis);
return result;
} //exTime的单位是秒
public static String setEx(String key,String value,int exTime){
Jedis jedis = null;
String result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.setex(key,exTime,value);
} catch (Exception e) {
log.error("setex key:{} value:{} error",key,value,e);
RedisPool.close(jedis);
return result;
}
RedisPool.close(jedis);
return result;
} public static String set(String key,String value){
Jedis jedis = null;
String result = null; try {
jedis = RedisPool.getJedis();
result = jedis.set(key,value);
} catch (Exception e) {
log.error("set key:{} value:{} error",key,value,e);
RedisPool.close(jedis);
return result;
}
RedisPool.close(jedis);
return result;
} public static String get(String key){
Jedis jedis = null;
String result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.get(key);
} catch (Exception e) {
log.error("get key:{} error",key,e);
RedisPool.close(jedis);
return result;
}
RedisPool.close(jedis);
return result;
} public static Long del(String key){
Jedis jedis = null;
Long result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.del(key);
} catch (Exception e) {
log.error("del key:{} error",key,e);
RedisPool.close(jedis);
return result;
}
RedisPool.close(jedis);
return result;
} public static void main(String[] args) {
Jedis jedis = RedisPool.getJedis(); jedis.setex("name",100,"lzh"); System.out.println("end"); } }
再配上读取配置文件的工具类  PropertiesUtil  需要注意的是,这个文件名写死了,就从这一个文件名中读取参数。你也可以再封装一下。
我这里就不麻烦了。
PropertiesUtil.java
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties; /**
* Created by 敲代码的卡卡罗特
*/
@Slf4j
public class PropertiesUtil { private static Properties props; static {
String fileName = "mmall.properties";
props = new Properties();
try {
props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8"));
} catch (IOException e) {
log.error("配置文件读取异常",e);
}
} public static String getProperty(String key){
String value = props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
return null;
}
return value.trim();
} public static String getProperty(String key,String defaultValue){ String value = props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
value = defaultValue;
}
return value.trim();
} public static void main(String[] arg){
System.out.println(PropertiesUtil.getProperty("redis.port"));
} }

mmall.properties

#redis config start

redis1.ip=127.0.0.1
redis1.port=6379 ##Tips:以上redis1和redis2的ip和port改成你自己的哟 #最大连接数
redis.max.total=20 #最大空闲数
redis.max.idle=10 #最小空闲数
redis.min.idle=2 #从jedis连接池获取连接时,校验并返回可用的连接
redis.test.borrow=true #把连接放回jedis连接池时,校验并返回可用的连接
redis.test.return=false #redis config end
ok,大功告成
 


redis工具类 ----RedisPoolUtil的更多相关文章

  1. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  2. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  3. redis 工具类 单个redis、JedisPool 及多个redis、shardedJedisPool与spring的集成配置

    http://www.cnblogs.com/edisonfeng/p/3571870.html http://javacrazyer.iteye.com/blog/1840161 http://ww ...

  4. SpringBoot整合Redis及Redis工具类撰写

            SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...

  5. redistemplate优雅地操作redis redis 工具类

    参考:https://www.cnblogs.com/superfj/p/9232482.html redis 工具类 package com.service; import org.springfr ...

  6. java的redis工具类

    package com.mracale.sell.utils; /** * @Auther: Mracale */ import org.springframework.beans.factory.a ...

  7. Redis 工具类

    项目里的Redis 工具类,写下来以备后用 public class RedisConnector { public class RedisParseResult<T> { public ...

  8. Redis 工具类 java 实现的redis 工具类

    最近了解了一下非关系型数据库 redis 会使用简单的命令 在自己本地电脑 使用时必须先启动服务器端 在启动客户端 redis 简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  9. Java操作Redis工具类

    依赖 jar 包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...

随机推荐

  1. The import * cannot be resolved

    背景 使用eclipse jee做练习的时候,下载了老师的项目源码.考虑到老师用的时myeclipse,目录结构略有不同,所有不想直接导入项目,又考虑到,可能环境不一样,会出现这样那样的问题,所以我的 ...

  2. Linux技巧汇总

    Linux改变用户登录的Shell: usermod -s /bin/zsh 用户名 改变文件夹.文件的所属用户组和用户 chown root:root testfile

  3. DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST

    Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...

  4. GSP事件探查器 无法进行跟踪的解决办法(场景之一)

    使用GSP事件探查器 可以快速的定位问题, 跟踪效果很好 但是有时会出现 无法新建跟踪的问题. 这里有一个比较常见的解决办法 问题现象: 新建跟踪无效. 解决办法 其实就三步: 1. 打开 servi ...

  5. Linux 检查磁盘性能速度

    1. hdparm 工具: hdparm –t 设备名(/dev/sda1) 2. time dd if=/dev/zero of=/tmp/test.dat bs=1G count=1

  6. delphi简单单向字符串加密函数

    delphi用久了有的时候得给密码加密一下,简单点就行了,这个函数还是不错的. const XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$8 ...

  7. Delphi下EasyGrid使用体会

    最近在编写软件的时候,非常需要一款支持多表头的StringGrid控件,朋友介绍使用EasyGrid控件,这款控件大概从04年开始就没有再更新,网上有关与它的资料也较少.但是通过其demo,此软件还是 ...

  8. 一点点linux系统的学习心得

    我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...

  9. centOS7 修改DNS

    #显示当前网络连接 #nmcli connection show NAME UUID TYPE DEVICE eno1 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802 ...

  10. Educational Codeforces Round 58 Div. 2 自闭记

    明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...