redisson 分布式锁的看门狗机制,如果业务处理一直没处理完,那看门狗的锁机制会一直不释放锁,这样不是造成死锁了吗 是怎么处理的
我大概理解你的意思,我也思考过这个问题,因为我把宕机和线程阻塞混为一谈了,线程阻塞是在没有宕机的情况下发生的。
看门狗的作用,考虑以下三种情况:
1,如果没有设置锁的过期时间,单靠逻辑来释放锁,就会出现获取锁的节点宕机时,锁没有释放,造成死锁。
2,如果设置了某个过期时间,在没有宕机的情况下,线程发生了阻塞,就会导致锁过期自动释放,带来一些其他的问题。
3,如果设置了看门狗,在没有宕机时,如果发生了阻塞,那么看门狗就能一直给线程续时间;如果宕机了,看门狗不起作用,过了有效期之后就会自动释放掉锁,不会造成死锁。
总结来说就是,在正常运行时,能够给锁加无限有效期,宕机时,能释放。
Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。
另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。
也就是锁,到了执行的时间锁就不会延续了,会直接释放掉
1.先明白什么是死锁,是两个或两个以上线程在相互等待,不借助外力无法进行下去。按题主说法,这不是死锁。
2.一直持有锁,我觉得没问题。业务没执行完,一直持有锁,这不就是你加锁的原因吗?
3.看门狗会自动续锁,要是怕一直不解锁,就设置解锁时间。设了解锁时间是没有watch dog续锁了。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
楼主有答案了吗
设置了过期时间,看门狗还能一直续期 这不是自相矛盾了吗?
1.如果设置了过期时间,那么看门狗不会生效。
2.如果使用了看门狗机制(前提:redis没有挂),并且应用挂了。但是在应用挂掉之前,看门狗已经续期了锁的时间,那么到了续期时间,会自动释放锁。
如果在应用挂掉之前,看门狗还没有设置续期,那么这个锁将永远不会被释放,除非人工干预。
3.所以说尽量少用看门狗。尽量估算业务执行时间,设置合理的过期时间。防止锁永远不会被释放。
关于看门狗部分:就是上锁时会有个过期时间,然后看门狗其实就是个定时任务,在每隔1/3默认时间时也就是10s执行一次,
然后把过期时间蓄满,所以在业务完成执行完成之前,锁不会自动过期,而业务完成之后锁也会自动过期,有个过期时间自然也就解决了死锁
如有帮助,望采纳,谢谢