Redis分布式锁

导读:本篇文章讲解 Redis分布式锁,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

  • 构建锁

参数解释:

key:键

value:值

nx:如果当前key存在,则set失败,否则成功

ex:设置key的过期时间

expireTime:key的过期时间,时间到了,Redis会自动删除key和value。

这个命令,将上面的错误例子2中的两个操作合为一个原子操作,保证了同时成功或同时失败。

public static boolean getDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) { 
 String result = jedis.set(lockKey, requestId, "NX", "EX", expireTime); 
 if (LOCK_SUCCESS.equals(result)) { 
return true; 
 } 
return false; 
}
  • 释放锁
public static boolean releaseDistributedLock(Jedis jedis, String lockKey, String requestId) { 
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 (RELEASE_SUCCESS.equals(result)) { 
 return true; 
 } 
 return false; 
}

原文地址:https://zhuanlan.zhihu.com/p/107695840
Redis命令文档:http://redisdoc.com/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73835.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!