👌看门狗机制的原理是什么?
口语化答案
在我们平常使用分布式锁的时候,一般会设置一个锁的过期时间,那么如果锁过期的时候,业务还没执行完怎么办,于是就有了看门狗。看门狗机制是一种用于自动续约分布式锁的机制,确保在持有锁的客户端处理完业务逻辑之前,锁不会过期。当客户端获取到锁时,会在 Redis 中设置一个键和一个过期时间(默认30秒)。同时,Redisson 会启动一个后台任务,这个任务会定期检查锁的状态。看门狗任务会每隔一段时间,默认是锁的过期时间的1/3,即10秒,检查锁的状态。如果锁仍然被持有,看门狗任务会将锁的过期时间重置为初始值。这样,锁的过期时间不断被延长,直到客户端明确释放锁或者客户端挂掉。以上。
题目解析
看门狗机制非常常问,一旦问到分布式锁的问题,就会产生这个问题,当你说出异常情况下,传统的分布式锁,采取过期时间释放,防止死锁的时候,就会引入到这个问题。
面试得分点
后台任务续约,高可靠,自动管理
题目详细答案
Redisson 的看门狗机制是一种用于自动续约分布式锁的机制,确保在持有锁的客户端处理完业务逻辑之前,锁不会过期。比如,我们平时使用分布式锁的时候,一般会设置一个锁的过期时间,那么如果锁过期的时候,业务还没执行完怎么办,于是就有了看门狗。
看门狗机制的原理
初始锁定:
当客户端获取到锁时,会在 Redis 中设置一个键(代表锁)和一个过期时间(默认30秒)。同时,Redisson 会启动一个后台任务(看门狗),这个任务会定期检查锁的状态。
自动续约:
看门狗任务会每隔一段时间(默认是锁的过期时间的1/3,即10秒)检查锁的状态。如果锁仍然被持有(即客户端还在持有锁且没有释放),看门狗任务会将锁的过期时间重置为初始值(例如,再次设置为30秒)。这样,锁的过期时间不断被延长,直到客户端明确释放锁或者客户端挂掉。
释放锁:
当客户端完成业务逻辑后,会显式地调用unlock()
方法释放锁。一旦锁被释放,看门狗任务会停止续约,锁在 Redis 中的键会被删除或自然过期。
看门狗机制的工作流程
获取锁:客户端请求获取锁,Redis 中创建一个键表示锁,并设置一个过期时间(例如30秒)。启动看门狗任务,定期检查锁的状态。
定期续约:看门狗任务每隔一定时间(例如10秒)检查锁的状态。如果锁仍然被持有(即客户端还在处理业务逻辑),看门狗任务会重置锁的过期时间(例如,再次设置为30秒)。
锁的释放:客户端业务逻辑完成后,调用unlock()
方法释放锁。看门狗任务停止续约,锁在 Redis 中的键被删除或自然过期。
看门狗机制的优势
高可靠性:通过自动续约机制,确保锁在持有者处理完业务逻辑之前不会过期,避免了锁意外过期导致的并发问题。
自动管理:无需手动续约锁的过期时间,简化了分布式锁的使用和管理。
容错性:如果客户端在持有锁期间崩溃或断开连接,锁会在过期时间后自动释放,避免了死锁问题。
示例
1 | import org.redisson.api.RLock; |