基于Redis封装分布式锁

2018-06-15  本文已影响0人  linrol

基于Redis的分布式锁封装记录

Jedis jedis = RedisPool.getJedis();
String result = jedis.set(key, request, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
RedisPool.close(jedis);
for (;;) {
  Jedis jedis = RedisPool.getJedis();
  String result = jedis.set(key, request, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, 10 * TIME);
  RedisPool.close(jedis);
  if (LOCK_SUCCESS.equals(result)) {
    break;
  }
  // 防止一直消耗 CPU
  Thread.sleep(100);
}
public static boolean unlock(String key, String request) {
  String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
  Jedis jedis = RedisPool.getJedis();
  Object result = jedis.eval(script, Collections.singletonList(key), Collections.singletonList(request));
  RedisPool.close(jedis);
  if (RELEASE_SUCCESS.equals(result)) {
    return true;
  }
  return false;
}
上一篇 下一篇

猜你喜欢

热点阅读