个人把工具类分为两部分:

一、连接池部分

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.*; import java.io.InputStream;
import java.util.Properties;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class JedisPoolUtil {
protected static Logger logger = LoggerFactory.getLogger(JedisPoolUtil.class); public static JedisPool jedisPool = null;
private String host;
private int port;
private int maxTotal;
private int maxIdle;
private int minIdle;
private boolean blockWhenExhausted;
private int maxWaitMillis;
private boolean testOnBorrow;
private boolean testOnReturn; public static Lock lock = new ReentrantLock(); private void initialConfig() {
try {
InputStream stream = JedisUtilBak.class.getClassLoader().getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(stream);
host = prop.getProperty("redis.host");
port = Integer.parseInt(prop.getProperty("redis.port")); maxTotal = Integer.parseInt(prop.getProperty("redis.maxTotal"));
maxIdle = Integer.parseInt(prop.getProperty("redis.maxIdle"));
minIdle = Integer.parseInt(prop.getProperty("redis.minIdle"));
blockWhenExhausted = Boolean.parseBoolean(prop.getProperty("redis.blockWhenExhausted"));
maxWaitMillis = Integer.parseInt(prop.getProperty("redis.maxWaitMillis"));
testOnBorrow = Boolean.parseBoolean(prop.getProperty("redis.testOnBorrow"));
testOnReturn = Boolean.parseBoolean(prop.getProperty("redis.testOnReturn")); // boolean testWhileIdle = Boolean.parseBoolean(prop.getProperty("redis.testWhileIdle"));
// int timeBetweenEvictionRunsMillis = Integer.parseInt(prop.getProperty("redis.timeBetweenEvictionRunsMillis"));
// int minEvictableIdleTimeMillis = Integer.parseInt(prop.getProperty("redis.minEvictableIdleTimeMillis"));
// int numTestsPerEvictionRun = Integer.parseInt(prop.getProperty("redis.numTestsPerEvictionRun"));
} catch (Exception e) {
logger.debug("parse configure file error.");
}
} /**
* initial redis pool
*/
private void initialPool() {
if (lock.tryLock()) {
lock.lock();
initialConfig();
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMaxWaitMillis(maxWaitMillis);
config.setTestOnBorrow(testOnBorrow);
jedisPool = new JedisPool(config, host, port);
} catch (Exception e) {
logger.debug("init redis pool failed : {}", e.getMessage());
} finally {
lock.unlock();
}
} else {
logger.debug("some other is init pool, just wait 1 second.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} } public Jedis getJedis() { if (jedisPool == null) {
initialPool();
}
try {
return jedisPool.getResource();
} catch (Exception e) {
logger.debug("getJedis() throws : {}" + e.getMessage());
}
return null;
} public Pipeline getPipeline() {
BinaryJedis binaryJedis = new BinaryJedis(host, port);
return binaryJedis.pipelined();
} }

二、操作方法部分

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple; import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.ReentrantLock; public class JedisUtil {
protected static Logger logger = LoggerFactory.getLogger(JedisUtil.class);
public static ReentrantLock lock = new ReentrantLock();
private final String DIST_LOCK_SUCCESS = "OK";
private final Long DIST_LOCK_RELEASE_SUCCESS = 1L;
private final String SET_IF_NOT_EXIST = "NX";
private final String SET_WITH_EXPIRE_TIME = "PX";
private JedisPoolUtil jedisPool = new JedisPoolUtil(); public boolean setString(String key, String value) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.set(key, value);
return true;
} catch (Exception e) {
logger.debug("setString() key {} throws:{}", key, e.getMessage());
return false;
} finally {
close(jedis);
}
} public boolean setStringEx(String key, int seconds, String value) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.setex(key, seconds, value);
return true;
} catch (Exception e) {
logger.debug("setStringEx() key {} throws:{}",key, e.getMessage());
return false;
} finally {
close(jedis);
}
} public String getString(String key) {
Jedis jedis = jedisPool.getJedis();
try {
return jedis.get(key);
} catch (Exception e) {
logger.debug("getString() key {} throws:{}", key,e.getMessage());
return null;
} finally {
close(jedis);
}
} public boolean delString(String key) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.del(key);
return true;
} catch (Exception e) {
logger.debug("delString() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public boolean delHash(String key, String mKey) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.hdel(key, mKey);
return true;
} catch (Exception e) {
logger.debug("setHash() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public boolean setHash(String key, String mKey, String mVal) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.hset(key, mKey, mVal);
return true;
} catch (Exception e) {
logger.debug("setHash() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public String getHash(String key, String mKey) {
Jedis jedis = jedisPool.getJedis();
try {
return jedis.hget(key, mKey);
} catch (Exception e) {
logger.debug("setHash() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public boolean setHashMulti(String key, Map<String, String> map) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.hmset(key, map);
return true;
} catch (Exception e) {
logger.debug("setMHash() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public List<String> getHashMulti(String key, String[] members) {
Jedis jedis = jedisPool.getJedis();
try {
return jedis.hmget(key, members);
} catch (Exception e) {
logger.debug("getHashMulti() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public List<String> getHashValsAll(String key) {
Jedis jedis = jedisPool.getJedis();
try {
return jedis.hvals(key);
} catch (Exception e) {
logger.debug("getHashValsAll() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public Set<String> getHashKeysAll(String key) {
Jedis jedis = jedisPool.getJedis();
try {
return jedis.hkeys(key);
} catch (Exception e) {
logger.debug("getHashValsAll() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public boolean addScoreSet(String key, String mKey, int score) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.zadd(key, score, mKey);
return true;
} catch (Exception e) {
logger.debug("addScoreSet() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public boolean delScoreSet(String key, String mKey) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.zrem(key, mKey);
return true;
} catch (Exception e) {
logger.debug("delScoreSet() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public boolean changeScoreSet(String key, String mKey, int score) {
Jedis jedis = jedisPool.getJedis();
try {
jedis.zincrby(key, score, mKey);
return true;
} catch (Exception e) {
logger.debug("changeScoreSet() key {} throws:{}", key,e.getMessage());
return false;
} finally {
close(jedis);
}
} public Set<String> listScoreSetString(String key, int start, int end, boolean asc) {
Jedis jedis = jedisPool.getJedis();
try {
if (asc) {
return jedis.zrange(key, start, end);
} else {
return jedis.zrevrange(key, start, end);
}
} catch (Exception e) {
logger.debug("listScoreSetString() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public Set<Tuple> listScoreSetTuple(String key, int start, int end, boolean asc) {
Jedis jedis = jedisPool.getJedis();
try {
if (asc) {
return jedis.zrangeWithScores(key, start, end);
} else {
return jedis.zrevrangeWithScores(key, start, end);
}
} catch (Exception e) {
logger.debug("listScoreSetString() key {} throws:{}", key,e.getMessage());
} finally {
close(jedis);
}
return null;
} public boolean getDistributedLock(String lockKey, String requestId, int expireTime) {
Jedis jedis = jedisPool.getJedis();
try {
String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
if (DIST_LOCK_SUCCESS.equals(result)) {
return true;
}
return false;
} catch (Exception e) {
// logger.debug("getDistributedLock key {} throws:{}", lockKey, e.getMessage());
logger.debug("getDistributedLock throws {}", e);
} finally {
close(jedis);
}
return false;
} public boolean releaseDistributedLock(String lockKey, String requestId) {
Jedis jedis = jedisPool.getJedis();
try {
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
if (DIST_LOCK_RELEASE_SUCCESS.equals(result)) {
return true;
}
return false;
} catch (Exception e) {
logger.debug("releaseDistributedLock throws {}", e.getMessage());
} finally {
close(jedis);
}
return false; } public void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}

Jedis工具类(含分布式锁的调用和释放)的更多相关文章

  1. Jedis工具类代码

    安装Redis可以参考 https://www.cnblogs.com/dddyyy/p/9763098.html Redis的学习可以参考https://www.cnblogs.com/dddyyy ...

  2. Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用

     1 修改pom.xml,添加依赖文件: <dependency> <groupId>com.whalin</groupId> <artifactId&g ...

  3. Jedis工具类

    1.RedisCache.java package cn.itcast.mybatis.dao; import java.util.Date;import java.util.HashMap;impo ...

  4. Java Redis 连接池 Jedis 工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import re ...

  5. Jedis 工具类

    package com.pig4cloud.pigx.admin.utils; import redis.clients.jedis.*; import java.util.ArrayList; im ...

  6. 2020最新的Spring Boot 分布式锁的具体实现(内附代码)

    前言 面试总是会被问到有没有用过分布式锁.redis 锁,大部分读者平时很少接触到,所以只能很无奈的回答 "没有".本文通过 Spring Boot 整合 redisson 来实现 ...

  7. Jedis 操作 Redis 工具类

    配置类 pom.xml pom.xml 里配置依赖 <dependency> <groupId>redis.clients</groupId> <artifa ...

  8. Spring普通类/工具类获取并调用Spring service对象的方法

    参考<Spring普通类获取并调用Spring service方法>,网址:https://blog.csdn.net/jiayi_0803/article/details/6892455 ...

  9. Redis 4.0.2分布式锁的Java实现

    简介 Redis分布式锁算法有两种,一种是单个Redis实例下的,一种是多个Redis实例的Redlock算法. 官方推荐Redlock算法,但是这个算法需要比较多的Redis实例而且是完全互相独立, ...

随机推荐

  1. 面试总结——Java高级工程师(三)

    https://blog.csdn.net/moneyshi/article/details/53086927

  2. android中使用Nine-Patch图片

    android中可以把图片进行处理,如果图片被拉伸的话,允许让图片部分区域不拉伸,部分区域拉伸.这个功能非常好,比如聊天的气泡,如果整个气泡被拉伸的话,会非常的丑. 老版的sdk中提供的有draw9p ...

  3. Jquery——动画效果

    jquery中常用的动画的方法就是hide()与show(). $(element).hide()这段代码可以与这相等element.css("display","non ...

  4. Linux中使用GoAccess进行日志实时监控

    一.用法命令: goaccess access_log -o /var/www/html/report.html --real-time-html 说明:请先安装Httpd和Goaccess 二.效果 ...

  5. 利用 pywin32 操作 excel

    from win32com.client import Dispatch import win32com.client import time # 获取excel 对象 excel = win32co ...

  6. Android学习笔记四:activity的四种启动模式

    Activity有四种启动模式:standard,singleTop,singleTask,singleInstance. 1.standard:标准启动模式 默认模式,这个模式下启动的Activit ...

  7. oracle12c安装报错:PRVF-0002的解决方法

    出错信息: 安装oracle12c, ./runInstaller 启动图形化报错 PRVF-0002 : Could not retrieve local nodename. 原因: 找不到主机名的 ...

  8. Java的一个关于“星球”的枚举

    public enum Planet { /** * 水星 */ MERCURY(3.302e+23, 2.439e6), /** * 金星 */ VENUS(4.869e+24, 6.052e6), ...

  9. 7、redis之使用spring集成commons-pool来操作常见数据类型

    环境的搭建参见:http://www.cnblogs.com/yangzhilong/p/4729857.html 下面直接贴具体的测试代码: package com.yzl; import java ...

  10. 查看MySQL的当前日期

    select current_date(); 查看MySQL的当前日期