24年白话讲解Redisson分布式锁底层实现原理以及源码实现

作者: 铁铁37爱编程分类: 计算机技术 发布时间: 2024-03-24 19:57:48 浏览:5757 次

24年白话讲解Redisson分布式锁底层实现原理以及源码实现

夜未央138:
谢谢你up主,看了几篇文章没看明白;一个视频豁然开朗

KK是个阴阳师:
看门狗自动续约机制那块有个疑问,传参的是leaseTime是局部变量,判断是否执行续约的leaseTime是全局变量,这两变量的定义是一致的吗?如果设置了超时时间然后看门狗机制续约功能就不用了的话会不会有点奇怪

【回复】我认为是因为加看门狗的话,过期时间就没有任何作用,所以就不需要加过期时间,都会续约,如果你加过期时间,说明你不需要看门狗。
不是库里:
最后那一段getLatch能讲一下吗。就是锁快释放了的时候。

DemoBilibi:
如果获取锁的线程卡死了,比如有个while(true)的死循环卡着,那看门狗机制是不是会导致这个线程的分布式锁永远无法释放呢?这样给key设置的过期时间是不是就没用了[思考]

【回复】你如果手动设置leaseTime的话,是不会触发watchDog机制的,只有leaseTime==-1L或者小于0时候,才会触发watchDog。 此时,从逻辑上来看,锁本身就是没有过期时间的。redis中设计的过期时间,只是为了防止在Redis或者获取锁的服务宕机之后,锁不能释放,导致下次还是获取不到锁的情况发生。
【回复】回复 @小陶憨憨 : 不算是设计缺陷 ,实际上你用reentrantLock也会导致这样的效果。
【回复】这个难道不是设计缺陷了吗
xinxiuyi:
为啥我不设置锁的过期时间, 看门狗是5秒, 同一个微服务启动2个, 端口号不一样, A微服务获取到锁, 打断点卡主当前请求, B微服务还能获取到锁? A服务不应该会续期锁码

【回复】回复 @xinxiuyi :可以用睡眠代替for循环
【回复】回复 @铁铁37爱编程 :我使用 100万次的 for循环, 没有循环完毕, 是可以自动续期的, 另一个端口号的服务获取不到锁, 应该是 redisson 感知不到 idea的代码断点吧..
【回复】回复 @铁铁37爱编程 :我使用 100万次的 for循环, 没有循环完毕, 是可以自动续期的, 另一个端口号的服务获取不到锁, 应该是 redisson 感知不到 idea的代码断点吧..
呆萌呆萌111:
讲的好清晰 ,如果设置kv值的存活时间为10s,那么10/3s线程还存在,看门狗还会不断的续期哟

【回复】不是的额,设置了存活时间,看门狗机制就不生效了

编程 源码实现 redission 面试 分布式 计算机技术 Java watch dog 分布式锁

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读