个人主页:金鳞踏雨
个人简介:大家好,我是金鳞,一个初出茅庐的Java小白
目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作
我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~
前言:今天在后台私信中看到这样一条提问,我回看了一下之前的文章,发现关于这个点确实没有提到
XXXX:您好,我是一个初学者,在我学习到看门狗的时候,有一个疑问:如果需要看门狗的话,是不是说明不好设置超时时间,那为什么不直接将Redis中的key设置为永久有效,然后手动释放锁呢,如果是因为Redis中设置key为永久有效可能导致锁无法被释放,那看门狗机制不是也有概率会导致锁一直在延期呢,请您解答一下我的困惑可以吗?
当初我在写这篇文章的时候也是一个初学者,对于相关问题理解也不透彻,现在来回答一下这个问题。
文章链接如下:
Redisson的看门狗机制究竟有什么用?_redisson看门狗机制_金鳞踏雨的博客-CSDN博客Redisson提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期,也就是说,如果一个拿到锁的线程一直没有完成逻辑,那么看门狗会帮助线程不断的延长锁超时时间,锁不会因为超时而被释放。默认情况下,看门狗的续期时间是30s,也可以通过修改 Config.lockWatchdogTimeout 来另行指定。另外Redisson 还提供了可以指定leaseTime参数的加锁方法来指定加锁的时间,但是一旦使用了这个参数看门狗机制就失效了(不会自动续期)https://blog.csdn.net/weixin_43715214/article/details/128213580Redission架构图
看门狗机制
Redisson是一个基于Redis的Java库,提供了丰富的功能和扩展,包括分布式锁的实现。Redisson中的看门狗机制(Watchdog mechanism)用于处理Redisson分布式锁的超时问题。
在Redisson中,分布式锁是通过在Redis中存储一个特定的键值对来实现的。这个键值对有一个设置的过期时间,用于定义锁的持有时间。当一个进程获取到锁时,Redisson会自动设置该键值对的过期时间,并启动看门狗机制。
看门狗机制的作用是定期续期锁的过期时间,确保锁在持有期间不会过期。它会周期性地对锁的键进行续期操作,避免锁在持有期间被意外释放。
然而,既然我们要周期性的对他就行续期,为什么不直接一步到位,设置成永久的呢???
使用看门狗机制相对于将锁设置为永久有效具有以下优点
-
自动释放锁:看门狗机制能够自动在设定的超时时间内续期锁的有效期。这意味着,即使在锁持有者遇到故障、异常情况或忘记手动释放锁的情况下,锁也会在超时时间后自动释放,避免了长时间的锁占用。
-
鲁棒性和可靠性:使用看门狗机制可以提高系统的鲁棒性和可靠性。无论是由于系统故障、网络问题、进程崩溃还是其他异常情况,锁都能够在超时时间内得到释放,从而避免死锁和资源泄漏的问题。
-
降低人为错误风险:将锁设置为永久有效需要依赖手动的操作来释放锁。这增加了人为错误的风险,例如忘记释放锁或释放锁的时机不正确。使用看门狗机制能够自动化这个过程,减少了人为错误的发生概率。
文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~
希望能和大佬们一起努力,诸君顶峰相见
再次感谢各位小伙伴儿们的支持!!!