Jedis工具类(含分布式锁的调用和释放)
生活随笔
收集整理的這篇文章主要介紹了
Jedis工具类(含分布式锁的调用和释放)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
個人把工具類分為兩部分:
一、連接池部分
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();}} }?
轉載于:https://www.cnblogs.com/yoyotl/p/8677711.html
總結
以上是生活随笔為你收集整理的Jedis工具类(含分布式锁的调用和释放)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web前端开发--列表
- 下一篇: NVisionXR_iOS教程六 ——