Loading

[Redis]Redisson

image

waitTime 等待时间。客户端尝试获取锁时最大等待时间,超过这个等待时间必然返回获取锁失败。
leaseTime 锁的租期。客户端可持有锁的时间,超过这个时间锁自动过期。

基本流程

  1. 竞争锁的客户端执行Lua脚本获取锁,如果获取失败,则订阅解锁消息,并挂起线程。
  2. 持有锁的客户端执行Lua脚本解锁,删除锁的同时往解锁消息通道发送解锁指令,Redis会广播解锁消息到所有订阅者。
  3. 等待锁的客户端收到解锁消息或者线程挂起时间超过锁超时时间(leaseTime)时,客户端会重新尝试获取分布式锁,如果仍然获不到,则线程再度进入阻塞状态,等待下一次解锁消息(新的锁持有者释放锁)到达或者锁超时。
  4. 等待锁的客户端如果等待时间超出了最大可等待时间(waitTime),会直接返回锁获取失败。
  5. 无论成功还是失败,等待锁的客户端线程最后都会取消订阅解锁消息。

Redisson看门狗机制

如果锁中的业务处理时间比较长,那么可能一种异常情况:即业务还未处理完毕,锁就提前过期了。Redisson针对这个问题的解决办法,是提供一个守护线程,定时检查锁状态。如果锁快要过期了,客户端还占有锁,那么就自动给锁续期,延长锁的过期时间。

https://juejin.cn/post/7168802584684134413#heading-7

posted @   Duancf  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示