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 @ 2024-09-26 13:48  Duancf  阅读(47)  评论(0)    收藏  举报