java jedis 封装_Redis+Jedis封装工具类

本文档提供了使用Java Jedis库封装的Redis连接池工具类的详细代码,包括初始化连接池、设置和获取键值、过期时间、列表操作等常见Redis操作。同时,该工具类还包含了异常处理和资源释放机制。
摘要由CSDN通过智能技术生成

packagecom.liying.monkey.core.util;importjava.io.IOException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map;importjava.util.Set;importorg.apache.commons.collections.CollectionUtils;importorg.apache.commons.lang3.StringUtils;importorg.apache.commons.lang3.math.NumberUtils;importorg.apache.log4j.Logger;importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisPool;importredis.clients.jedis.JedisPoolConfig;importcom.liying.monkey.core.common.Constants.Zero;public classRedisUtil {private static final Logger log = Logger.getLogger(RedisUtil.class);//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;

private static int MAX_WAIT = 15 * 1000;//超时时间

private static int TIMEOUT = 10 * 1000;private static JedisPool jedisPool = null;/*** Jedis实例获取返回码

*

*@authorjqlin

**/

public static classJedisStatus{/**Jedis实例获取失败*/

public static final long FAIL_LONG = -5L;/**Jedis实例获取失败*/

public static final int FAIL_INT = -5;/**Jedis实例获取失败*/

public static final String FAIL_STRING = "-5";

}private static voidinitialPool() {//Redis服务器IP

String HOST = PropertyReader.get("redis.native.host");//Redis的端口号

int PORT = NumberUtils.toInt(PropertyReader.get("redis.native.port"), 6379);//访问密码

String AUTH = PropertyReader.get("redis.native.password");try{

JedisPoolConfig config= newJedisPoolConfig();//最大连接数,如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。

config.setMaxTotal(NumberUtils.toInt(PropertyReader.get("redis.native.maxTotal"), 400));//最大空闲数,控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。

config.setMaxIdle(NumberUtils.toInt(PropertyReader.get("redis.native.maxIdle"), 50));//最小空闲数

config.setMinIdle(NumberUtils.toInt(PropertyReader.get("redis.native.minIdle"), 10));//是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个

config.setTestOnBorrow(true);//在return给pool时,是否提前进行validate操作

config.setTestOnReturn(true);//在空闲时检查有效性,默认false

config.setTestWhileIdle(true);//表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;//这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义

config.setMinEvictableIdleTimeMillis(30000);//表示idle object evitor两次扫描之间要sleep的毫秒数

config.setTimeBetweenEvictionRunsMillis(60000);//表示idle object evitor每次扫描的最多的对象数

config.setNumTestsPerEvictionRun(1000);//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;

config.setMaxWaitMillis(MAX_WAIT);if(StringUtils.isNotBlank(AUTH)) {

jedisPool= newJedisPool(config, HOST, PORT, TIMEOUT, AUTH);

}else{

jedisPool= newJedisPool(config, HOST, PORT, TIMEOUT);

}

}catch(Exception e) {if(jedisPool != null){

jedisPool.close();

}

log.error("初始化Redis连接池失败", e);

}

}/*** 初始化Redis连接池*/

static{

initialPool();

}/*** 在多线程环境同步初始化*/

private static synchronized voidpoolInit() {if (jedisPool == null) {

initialPool();

}

}/*** 同步获取Jedis实例

*

*@returnJedis*/

public staticJedis getJedis() {if (jedisPool == null) {

poolInit();

}

Jedis jedis= null;try{if (jedisPool != null) {

jedis=jedisPool.getResource();

}

}catch(Exception e) {

log.error("同步获取Jedis实例失败" +e.getMessage(), e);

returnBrokenResource(jedis);

}returnjedis;

}/*** 释放jedis资源

*

*@paramjedis*/@SuppressWarnings("deprecation")public static void returnResource(finalJedis jedis) {if (jedis != null && jedisPool != null) {

jedisPool.returnResource(jedis);

}

}

@SuppressWarnings("deprecation")public static void returnBrokenResource(finalJedis jedis) {if (jedis != null && jedisPool != null) {

jedisPool.returnBrokenResource(jedis);

}

}/*** 设置值

*

*@paramkey

*@paramvalue

*@return-5:Jedis实例获取失败
OK:操作成功
null:操作失败

*@authorjqlin*/

public staticString set(String key, String value) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_STRING;

}

String result= null;try{

result=jedis.set(key, value);

}catch(Exception e) {

log.error("设置值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 设置值

*

*@paramkey

*@paramvalue

*@paramexpire 过期时间,单位:秒

*@return-5:Jedis实例获取失败
OK:操作成功
null:操作失败

*@authorjqlin*/

public static String set(String key, String value, intexpire) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_STRING;

}

String result= null;try{

result=jedis.set(key, value);

jedis.expire(key, expire);

}catch(Exception e) {

log.error("设置值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取值

*

*@paramkey

*@return*@authorjqlin*/

public staticString get(String key) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_STRING;

}

String result= null;try{

result=jedis.get(key);

}catch(Exception e) {

log.error("获取值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 设置key的过期时间

*

*@paramkey

*@paramvalue -5:Jedis实例获取失败,1:成功,0:失败

*@return*@authorjqlin*/

public static long expire(String key, intseconds) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_LONG;

}long result =Zero.LONG;try{

result=jedis.expire(key, seconds);

}catch(Exception e) {

log.error(String.format("设置key=%s的过期时间失败:" +e.getMessage(), key), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 判断key是否存在

*

*@paramkey

*@return*@authorjqlin*/

public static booleanexists(String key) {

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");return false;

}boolean result = false;try{

result=jedis.exists(key);

}catch(Exception e) {

log.error(String.format("判断key=%s是否存在失败:" +e.getMessage(), key), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 删除key

*

*@paramkeys

*@return-5:Jedis实例获取失败,1:成功,0:失败

*@authorjqlin*/

public static longdel(String... keys) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_LONG;

}long result =JedisStatus.FAIL_LONG;try{

result=jedis.del(keys);

}catch(Exception e) {

log.error(String.format("删除key=%s失败:" +e.getMessage(), keys), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** set if not exists,若key已存在,则setnx不做任何操作

*

*@paramkey

*@paramvalue key已存在,1:key赋值成功

*@return*@authorjqlin*/

public static longsetnx(String key, String value) {long result =JedisStatus.FAIL_LONG;

Jedis jedis=getJedis();if(jedis == null){returnresult;

}try{

result=jedis.setnx(key, value);

}catch(Exception e) {

log.error("设置值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** set if not exists,若key已存在,则setnx不做任何操作

*

*@paramkey

*@paramvalue key已存在,1:key赋值成功

*@paramexpire 过期时间,单位:秒

*@return*@authorjqlin*/

public static long setnx(String key, String value, intexpire) {long result =JedisStatus.FAIL_LONG;

Jedis jedis=getJedis();if(jedis == null){returnresult;

}try{

result=jedis.setnx(key, value);

jedis.expire(key, expire);

}catch(Exception e) {

log.error("设置值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 在列表key的头部插入元素

*

*@paramkey

*@paramvalues -5:Jedis实例获取失败,>0:返回操作成功的条数,0:失败

*@return*@authorjqlin*/

public static longlpush(String key, String... values) {long result =JedisStatus.FAIL_LONG;

Jedis jedis=getJedis();if(jedis == null){returnresult;

}try{

result=jedis.lpush(key, values);

}catch(Exception e) {

log.error("在列表key的头部插入元素失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 在列表key的尾部插入元素

*

*@paramkey

*@paramvalues -5:Jedis实例获取失败,>0:返回操作成功的条数,0:失败

*@return*@authorjqlin*/

public static longrpush(String key, String... values) {long result =JedisStatus.FAIL_LONG;

Jedis jedis=getJedis();if(jedis == null){returnresult;

}try{

result=jedis.rpush(key, values);

}catch(Exception e) {

log.error("在列表key的尾部插入元素失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 返回存储在key列表的特定元素

*

*

*@paramkey

*@paramstart 开始索引,索引从0开始,0表示第一个元素,1表示第二个元素

*@paramend 结束索引,-1表示最后一个元素,-2表示倒数第二个元素

*@returnredis client获取失败返回null

*@authorjqlin*/

public static List lrange(String key, long start, longend) {

Jedis jedis=getJedis();if(jedis == null){return null;

}

List result = null;try{

result=jedis.lrange(key, start, end);

}catch(Exception e) {

log.error("查询列表元素失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取List缓存对象

*

*@paramkey

*@paramstart

*@paramend

*@returnList 返回类型

*@authorjqlin*/

public static List range(String key, long start, long end, Classclazz){

List dataList =lrange(key, start, end);if(CollectionUtils.isEmpty(dataList)){return new ArrayList();

}returnJavaJsonConvert.json2List(dataList.toString(), clazz);

}/*** 获取列表长度

*

*@paramkey -5:Jedis实例获取失败

*@return*@authorjqlin*/

public static longllen(String key) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_LONG;

}long result = 0;try{

result=jedis.llen(key);

}catch(Exception e) {

log.error("获取列表长度失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 移除等于value的元素

* 当count>0时,从表头开始查找,移除count个;

* 当count=0时,从表头开始查找,移除所有等于value的;

* 当count<0时,从表尾开始查找,移除count个

*

*@paramkey

*@paramcount

*@paramvalue

*@return-5:Jedis实例获取失败

*@authorjqlin*/

public static long lrem(String key, longcount, String value) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_LONG;

}long result = 0;try{

result=jedis.lrem(key, count, value);

}catch(Exception e) {

log.error("获取列表长度失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 对列表进行修剪

*

*@paramkey

*@paramstart

*@paramend

*@return-5:Jedis实例获取失败,OK:命令执行成功

*@authorjqlin*/

public static String ltrim(String key, long start, longend) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_STRING;

}

String result= "";try{

result=jedis.ltrim(key, start, end);

}catch(Exception e) {

log.error("获取列表长度失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 设置对象

*

*@paramkey

*@paramobj

*@return*@authorjqlin*/

public static String setObject(String key ,T obj){

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_STRING;

}

String result= null;try{byte[] data=SerializeUtil.serialize(obj);

result=jedis.set(key.getBytes(), data);

}catch(Exception e) {

log.error("设置对象失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取对象

*

*@paramkey

*@return*@authorjqlin*/@SuppressWarnings("unchecked")public static T getObject(String key){

Jedis jedis=getJedis();if(jedis == null){return null;

}

T result= null;try{byte[] data =jedis.get(key.getBytes());if(data != null && data.length > 0){

result=(T)SerializeUtil.unserialize(data);

}

}catch(Exception e) {

log.error("获取对象失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 设置List集合(慎用)

*

*@paramkey

*@paramdataList

*@return*@authorjqlin*/

public synchronized static T setList(String key, ListdataList){

Jedis jedis=getJedis();if(jedis == null){return null;

}

T result= null;try{

List list =getList(key);if(CollectionUtils.isNotEmpty(list)){

dataList.addAll(list);

}if(CollectionUtils.isNotEmpty(dataList)){byte[] data =SerializeUtil.serializeToList(dataList);

jedis.set(key.getBytes(), data);

}else{//如果list为空,则设置一个空

jedis.set(key.getBytes(), "".getBytes());

}

}catch(Exception e) {

log.error("设置List集合失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取List集合(慎用)

*

*@paramkey

*@return*@authorjqlin*/

public static ListgetList(String key){

Jedis jedis=getJedis();if(jedis == null){return null;

}try{byte[] data =getJedis().get(key.getBytes());if(data != null && data.length > 0){returnSerializeUtil.unserializeToList(data);

}

}catch(Exception e) {

log.error("获取List集合失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}return null;

}/*** 缓存Map赋值

*

*@paramkey

*@paramfield

*@paramvalue

*@return-5:Jedis实例获取失败

*@authorjqlin*/

public static longhset(String key, String field, String value) {

Jedis jedis=getJedis();if(jedis == null){returnJedisStatus.FAIL_LONG;

}long result = 0L;try{

result=jedis.hset(key, field, value);

}catch(Exception e) {

log.error("缓存Map赋值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取缓存的Map值

*

*@paramkey

*@return

*/

public staticString hget(String key, String field){

Jedis jedis=getJedis();if(jedis == null){return null;

}

String result= null;try{

result=jedis.hget(key, field);

}catch(Exception e) {

log.error("获取缓存的Map值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnresult;

}/*** 获取map所有的字段和值

*

*@paramkey

*@return*@authorjqlin*/

public static MaphgetAll(String key){

Map map = new HashMap();

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");returnmap;

}try{

map=jedis.hgetAll(key);

}catch(Exception e) {

log.error("获取map所有的字段和值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnmap;

}/*** 查看哈希表 key 中,指定的field字段是否存在。

*

*@paramkey

*@paramfield

*@return*@authorjqlin*/

public staticBoolean hexists(String key, String field){

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");return null;

}try{returnjedis.hexists(key, field);

}catch(Exception e) {

log.error("查看哈希表field字段是否存在失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}return null;

}/*** 获取所有哈希表中的字段

*

*@paramkey

*@return*@authorjqlin*/

public static Sethkeys(String key) {

Set set = new HashSet();

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");returnset;

}try{returnjedis.hkeys(key);

}catch(Exception e) {

log.error("获取所有哈希表中的字段失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}return null;

}/*** 获取所有哈希表中的值

*

*@paramkey

*@return*@authorjqlin*/

public static Listhvals(String key) {

List list = new ArrayList();

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");returnlist;

}try{returnjedis.hvals(key);

}catch(Exception e) {

log.error("获取所有哈希表中的值失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}return null;

}/*** 从哈希表 key 中删除指定的field

*

*@paramkey

*@paramfield

*@return*@authorjqlin*/

public static longhdel(String key, String... fields){

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");returnJedisStatus.FAIL_LONG;

}try{returnjedis.hdel(key, fields);

}catch(Exception e) {

log.error("map删除指定的field失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}return 0;

}public static Setkeys(String pattern){

Set keyList = new HashSet();

Jedis jedis=getJedis();if(jedis == null){

log.warn("Jedis实例获取为空");returnkeyList;

}try{

keyList=jedis.keys(pattern);

}catch(Exception e) {

log.error("操作keys失败:" +e.getMessage(), e);

returnBrokenResource(jedis);

}finally{

returnResource(jedis);

}returnkeyList;

}public static void main(String[] args) throwsIOException {//System.out.println(hset("map", "a","3"));//System.out.println(hset("map", "b","3"));//System.out.println(hset("map", "c","3"));

Set set = keys("lock*");for(String key : set){

System.out.println(key);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值