目录
面试问题
Redis锁的过期时间小于业务的执行时间该如何续期?
问题分析
首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy
.我们来看
很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了,其实Redis分布式锁比较正确的姿势是采用redisson
这个客户端工具
如何回答
Redisson 的 Watch Dog 机制
只要客户端一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁key的生存时间。
默认情况下,加锁的时间是30秒,.如果加锁的业务没有执行完,就会进行一次续期,把锁重置成30秒
处理业务机器宕机的情况
watch dog 线程是由业务服务器(即运行 Redisson 客户端的服务器)发起和管理的。当业务执行的机器突然宕机或者出现网络分区时,watch dog 线程可能无法正常工作,这可能导致锁无法及时释放。为了处理这种情况,Redisson 提供了以下机制:
- 锁的自动过期:即使 watch dog 无法续期,锁也会在到达其过期时间后自动释放。这确保了即使在宕机的情况下,其他客户端也能在一定时间后获得锁。
- 锁的过期时间设置:在设置锁的过期时间时,应考虑业务逻辑的最大执行时间,并留出足够的余地以应对不可预见的延迟。
底层原理

拜托,面试请不要再问我Redis分布式锁的实现原理【石杉的架构笔记】
(1)加锁机制
咱们来看上面那张图,现在某个客户端要加锁。如果该客户端面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器。
这里注意,仅仅只是选择一台机器!这点很关键!
紧接着,就会发送一段lua脚本到redis上,那段lua脚本如下所示:
为什么要重复加锁?
-
可重入性:可重入锁(Reentrant Lock)意味着同一个线程可以对同一把锁多次加锁。这在递归调用或者多次访问共享资源时非常有用,因为它允许同一