配置类

pom.xml

pom.xml 里配置依赖

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.5.2</version>
</dependency>

application.properties

spring 属性文件 application.properties 里配置 redis 配置项

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=xxxxxxx
#超时时间,毫秒
REDIS_TIMEOUT=1000
#最大连接数
REDIS_MAXTOTAL=1000
#最大空闲连接数
REDIS_MAXIDLE=100
#最小空闲连接数
REDIS_MINIDLE=100
#获取连接时的最大等待毫秒数
REDIS_MAXWAITMILLIS=100
#默认缓存过期时间,单位秒
REDIS_DEFAULT_TIMEOUT=7200

常量配置类

@Configuration
public class Constants { public static String REDIS_HOST;
public static int REDIS_PORT;
public static String REDIS_PASSWORD;
public static int REDIS_TIMEOUT;
public static int REDIS_MAXTOTAL;
public static int REDIS_MAXIDLE;
public static int REDIS_MINIDLE;
public static int REDIS_MAXWAITMILLIS;
public static int REDIS_DEFAULT_TIMEOUT; @Value("${REDIS_HOST}")
public void setREDIS_HOST(String rEDIS_HOST) {
REDIS_HOST = rEDIS_HOST;
} @Value("${REDIS_PORT}")
public void setREDIS_PORT(int rEDIS_PORT) {
REDIS_PORT = rEDIS_PORT;
} @Value("${REDIS_PASSWORD}")
public void setREDIS_PASSWORD(String rEDIS_PASSWORD) {
REDIS_PASSWORD = rEDIS_PASSWORD;
} @Value("${REDIS_TIMEOUT}")
public void setREDIS_TIMEOUT(int rEDIS_TIMEOUT) {
REDIS_TIMEOUT = rEDIS_TIMEOUT;
} @Value("${REDIS_MAXTOTAL}")
public void setREDIS_MAXTOTAL(int rEDIS_MAXTOTAL) {
REDIS_MAXTOTAL = rEDIS_MAXTOTAL;
} @Value("${REDIS_MAXIDLE}")
public void setREDIS_MAXIDLE(int rEDIS_MAXIDLE) {
REDIS_MAXIDLE = rEDIS_MAXIDLE;
} @Value("${REDIS_MINIDLE}")
public void setREDIS_MINIDLE(int rEDIS_MINIDLE) {
REDIS_MINIDLE = rEDIS_MINIDLE;
} @Value("${REDIS_MAXWAITMILLIS}")
public void setREDIS_MAXWAITMILLIS(int rEDIS_MAXWAITMILLIS) {
REDIS_MAXWAITMILLIS = rEDIS_MAXWAITMILLIS;
} @Value("${REDIS_DEFAULT_TIMEOUT}")
public void setREDIS_DEFAULT_TIMEOUT(int rEDIS_DEFAULT_TIMEOUT) {
REDIS_DEFAULT_TIMEOUT = rEDIS_DEFAULT_TIMEOUT;
}
}

工厂类

Jedis工厂类(枚举)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.zcdog.market.util.Constants; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisDataException; public enum JedisFactory { INSTANCE; private static Logger logger = LoggerFactory.getLogger(JedisFactory.class); private volatile JedisPool pool; /**
* 获取Jedis连接
* @return
*/
public Jedis getConnection() {
if (pool == null) {
synchronized (INSTANCE) {
if (pool == null) {
logger.debug("init jedis pool." + Thread.currentThread().getName());
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(Constants.REDIS_MAXTOTAL);
poolConfig.setMaxIdle(Constants.REDIS_MAXIDLE);
poolConfig.setMinIdle(Constants.REDIS_MINIDLE);
poolConfig.setMaxWaitMillis(Constants.REDIS_MAXWAITMILLIS);
if (Constants.REDIS_PASSWORD != null && !"".equals(Constants.REDIS_PASSWORD)) {
pool = new JedisPool(poolConfig, Constants.REDIS_HOST, Constants.REDIS_PORT, Constants.REDIS_TIMEOUT, Constants.REDIS_PASSWORD);
}else {
pool = new JedisPool(poolConfig, Constants.REDIS_HOST, Constants.REDIS_PORT, Constants.REDIS_TIMEOUT);
}
}
}
}
return pool.getResource();
} /**
* 处理Jedis连接异常
* 记录日志并返回连接是否中断
* @param jedisException
* @return
*/
public boolean handleJedisException(Exception jedisException) {
if (jedisException instanceof JedisConnectionException) {
logger.error("Redis connection lost.", jedisException);
} else if (jedisException instanceof JedisDataException) {
if ((jedisException.getMessage() != null) && (jedisException.getMessage().indexOf("READONLY") != -1)) {
logger.error("Redis connection is read-only slave.", jedisException);
} else {
return false;
}
} else {
logger.error("Jedis happen exception.", jedisException);
}
return true;
} /**
* 返回Jedis连接到连接池
* 根据连接状态调用不同的返回方法
* @param jedis
* @param exceptionFlag
*/
public void closeResource(Jedis jedis, boolean exceptionFlag) {
try {
if (exceptionFlag) {
pool.returnBrokenResource(jedis);
} else if (!exceptionFlag && jedis != null) {
pool.returnResource(jedis);
}
} catch (Exception e) {
logger.error("Return back jedis failed, will close the jedis.", e);
try {
jedis.quit();
} catch (Exception ex) {
logger.error("Jedis quit error.", ex);
}
try {
jedis.disconnect();
} catch (Exception exd) {
logger.error("Jedis disconnect error.", exd);
}
}
}
}

工具类

Jedis工具类,如果没有适用的方法,可自行添加,仅作示例。

更多可参考:Jedis工具类

import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction; public class RedisUtils { private static Logger logger = LoggerFactory.getLogger(RedisUtils.class); private static Jedis getConnection() {
return JedisFactory.INSTANCE.getConnection();
} public static void closeResource(Jedis jedis, boolean exceptionFlag) {
JedisFactory.INSTANCE.closeResource(jedis, exceptionFlag);
} public static boolean handleJedisException(Exception jedisException) {
return JedisFactory.INSTANCE.handleJedisException(jedisException);
} public static void save(String key, String value) {
save(key, value, Constants.REDIS_DEFAULT_TIMEOUT);
} public static void save(String key, String value, int expires) {
Jedis jedis = null;
boolean exceptionFlag = false;
try {
jedis = getConnection();
if (key == null || "".equals(key)) {
return;
}
jedis.setex(key, expires, value);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error("save redis error:", e);
} finally {
closeResource(jedis, exceptionFlag);
}
} public static String get(String key) {
boolean exceptionFlag = false;
Jedis jedis = null;
String value = null;
try {
jedis = getConnection();
value = jedis.get(key);
return value;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error("get redis error :", e);
return value;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static void delete(String key) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
if (key == null || "".equals(key)) {
return;
}
jedis = getConnection();
jedis.del(key);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error("delete redis error:", e);
} finally {
closeResource(jedis, exceptionFlag);
}
} public static List<String> mget(String[] keys) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
List<String> list = null;
jedis = getConnection();
list = jedis.mget(keys);
return list;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
return null;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static String hget(String key, String field) {
boolean exceptionFlag = false;
Jedis jedis = null;
String value = null;
try {
jedis = getConnection();
value = jedis.hget(key, field);
return value;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
return value;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static String setnx(String key, String value) {
boolean exceptionFlag = false;
Jedis jedis = null;
String result = null;
try {
jedis = getConnection();
result = jedis.set(key, value, "NX", "EX", 300L);
return result;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
return result;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static void hsetTransaction(String key1, String field1, String value1, String key2, String field2,
String value2, int timeout) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
Transaction multi = jedis.multi();
multi.hset(key1, field1, value1);
multi.expire(key1, Constants.REDIS_DEFAULT_TIMEOUT); multi.hset(key2, field2, value2);
multi.expire(key2, timeout);
multi.exec();
logger.info("[redis] hsetTransaction success key1: {} field1: {} key2: {} field2: {}", key1, field1, key2,
field2);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hset hsetTransaction error :", e);
} finally {
closeResource(jedis, exceptionFlag);
} } public static void hsetTransactionWithDeleteV2(String key1, String field1, String value1, String key2,
String field2, String value2, int timeout, String deleteKey) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
Transaction multi = jedis.multi();
multi.hset(key1, field1, value1);
multi.expire(key1, Constants.REDIS_DEFAULT_TIMEOUT); multi.hset(key2, field2, value2);
multi.expire(key2, timeout);
multi.del(deleteKey);
multi.exec();
logger.info("[redis] hsetTransactionWithDelete success key1: {} field1: {} key2: {} field2: {}", key1,
field1, key2, field2);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hsetTransactionWithDelete redis error :", e);
} finally {
closeResource(jedis, exceptionFlag);
} } public static Map<?, ?> hgetall(String key) {
boolean exceptionFlag = false;
Jedis jedis = null;
Map<?, ?> value = null;
try {
jedis = getConnection();
value = jedis.hgetAll(key);
return value;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hgetall redis error :", e);
return value;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static void hset(String key, String field, String value) {
hset(key, field, value, Constants.REDIS_DEFAULT_TIMEOUT);
} public static void hset(String key, String field, String value, int expireTime) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
jedis.hset(key, field, value);
jedis.expire(key, expireTime);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hset redis error :", e);
} finally {
closeResource(jedis, exceptionFlag);
}
} public static void hdelete(String key, String field) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
jedis.hdel(key, field);
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hdel redis error :", e);
} finally {
closeResource(jedis, exceptionFlag);
}
} public static boolean hexist(String key, String field) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
boolean flag = jedis.hexists(key, field);
return flag;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error("hexist redis error:", e);
return false;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static int hlen(String key) {
boolean exceptionFlag = false;
Jedis jedis = null;
try {
jedis = getConnection();
return jedis.hlen(key).intValue();
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error(" hlen redis error :", e);
return 0;
} finally {
closeResource(jedis, exceptionFlag);
}
} public static Set<String> hkeys(String key) {
boolean exceptionFlag = false;
Jedis jedis = null;
Set<String> skey = null;
try {
jedis = getConnection();
skey = jedis.hkeys(key);
return skey;
} catch (Exception e) {
exceptionFlag = handleJedisException(e);
logger.error("hkeys redis error:", e);
return skey;
} finally {
closeResource(jedis, exceptionFlag);
}
} }

Jedis 操作 Redis 工具类的更多相关文章

  1. Java操作Redis工具类

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

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

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

  3. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  4. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

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

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

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

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

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

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

  8. Java中使用Jedis操作Redis(转载)

    整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...

  9. jedis操作redis全指南

    package com.wujintao.redis; import java.util.Date; import java.util.HashMap; import java.util.Iterat ...

随机推荐

  1. gitlab 502

    经过一个下午的查找终于发现了错误,原来是在服务器上还开启了一个tomcat服务,占用了8080端口,使GitLab的unicorn服务不能开启. 最后在/etc/gitlab/gitlab.rb 中做 ...

  2. centos 7 一键安装gitlab

    # cat /etc/redhat-release CentOS release 6.5 (Final) # strings /lib64/libc.so.6 |grep GLIBC_ 首先升级 如果 ...

  3. Python+Selenium学习--cookie处理

    场景 有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的.webdriver 可以读取.添加和删除cookie 信息.webdrive ...

  4. 688. Knight Probability in Chessboard棋子留在棋盘上的概率

    [抄题]: On an NxN chessboard, a knight starts at the r-th row and c-th column and attempts to make exa ...

  5. 联想RD450带Read10服务器操作系统密码忘记

    联想RD450带Read10服务器操作系统密码忘记 可以用U盘PE进入重写密码 按F1进入BIOS界面设置如下 进入BOOT选项卡,设置U盘第一启动,也就是图中 Boot Option #1 设置为 ...

  6. Vim中YouCompleteMe插件安装

    背景 YouCompleteMe需要使用GCC进行编译,然而Centos 6.7默认的GCC版本太低,所以需要使用devtools-2,用来安装多个版本GCC手动编译安装GCC的坑简直不要太多(类似于 ...

  7. uboot——git代码仓

    1,注册GitHub帐号,创建GitHub项目代码仓库 https://www.cnblogs.com/LoTGu/p/6075994.html 参考其第二段,注册账号,设置仓库. 2,上传代码 测试 ...

  8. linux resin 基本站点配置

    进入配置文件目录: [root@linuxidc resin-]# cd /usr/local/resin/conf/ 查看都有哪些配置文件: [root@linuxidc conf]# ls app ...

  9. python程序编写简介

    语句和语法 # 注释 \ 转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 : 将两个语句连接到一行,可读性差,不建议使用 : 将代码的头和体分开 语句( ...

  10. 记一次python的任务调度模块apscheduler只在首次执行任务的情况

    最近需要写个日更新的程序,用time.sleep()不能很好的控制任务的执行时间 于是,就使用了python的任务调度模块apscheduler,这个模块功能真的是很强大 具体的就不多讲了 将任务程序 ...