[Redis]Redisson
waitTime 等待时间。客户端尝试获取锁时最大等待时间,超过这个等待时间必然返回获取锁失败。
leaseTime 锁的租期。客户端可持有锁的时间,超过这个时间锁自动过期。
基本流程
- 竞争锁的客户端执行Lua脚本获取锁,如果获取失败,则订阅解锁消息,并挂起线程。
- 持有锁的客户端执行Lua脚本解锁,删除锁的同时往解锁消息通道发送解锁指令,Redis会广播解锁消息到所有订阅者。
- 等待锁的客户端收到解锁消息或者线程挂起时间超过锁超时时间(leaseTime)时,客户端会重新尝试获取分布式锁,如果仍然获不到,则线程再度进入阻塞状态,等待下一次解锁消息(新的锁持有者释放锁)到达或者锁超时。
- 等待锁的客户端如果等待时间超出了最大可等待时间(waitTime),会直接返回锁获取失败。
- 无论成功还是失败,等待锁的客户端线程最后都会取消订阅解锁消息。
Redisson看门狗机制
如果锁中的业务处理时间比较长,那么可能一种异常情况:即业务还未处理完毕,锁就提前过期了。Redisson针对这个问题的解决办法,是提供一个守护线程,定时检查锁状态。如果锁快要过期了,客户端还占有锁,那么就自动给锁续期,延长锁的过期时间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义