码迷,mamicode.com
首页 > 其他好文 > 详细

Redis分布式锁实现

时间:2021-04-27 14:41:24      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:一点   失败   string   原子性   使用   watchdog   宕机   过期   执行   

redis一个命令setnx
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写
将 key 的值设为 value ,当且仅当 key 不存在.
返回值:
设置成功,返回 1 。
设置失败,返回 0 。
如下思路是设置一个过期锁。但是实际开发中这个过期时间很难判断,需要加守护线程进行重新设置过期时间。
public boolean tryLock(String key, String requestId, int expireTime) {
//使用jedis的api,保证原子性
//NX 不存在则操作 EX 设置有效期,单位是秒
String result = jedis.set(key, requestId, "NX", "EX", expireTime);
//返回OK则表示加锁成功
return "OK".equals(result);
}
有一种方法比较靠谱一点,就是给锁续期。在Redisson框架实现分布式锁的思路,就使用watchDog机制实现锁的续期。当加锁成功后,同时开启守护线程,默认有效期是30秒,每隔10秒就会给锁续期到30秒,只要持有锁的客户端没有宕机,就能保证一直持有锁,直到业务代码执行完毕由客户端自己解锁,如果宕机了自然就在有效期失效后自动解锁。

Redis分布式锁实现

标签:一点   失败   string   原子性   使用   watchdog   宕机   过期   执行   

原文地址:https://www.cnblogs.com/stubborn-dude/p/14705692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!