超时释放

问题: 主从关系导致一致性问题

如果redis崩了, 或者主从切换有延时:就会出现: 单点锁的安全性问题

  • 锁还没同步到从节点,主挂了 → 新主不认识锁 → 锁丢失
  • 延迟太大导致**两个线程同时认为自己加锁成功
    **

image1

方案:多弄几个备用的独立节点 multilock
image2

Redisson 的 RMultiLock 其实是一个组合锁(composite lock),
它能同时在多个 Redis 实例上加锁。

Redlock算法
image3

源码:

  • 入口类:组合多个锁的控制器
    image4

2.核心方法: trylock

“依次尝试获取所有子锁,任何一个失败就释放已经加成功的锁。”

没有得到全部锁就unlockInner(acquiredLocks),保证全或无
其中acquiredLocks是已经获得的锁
image5

3.unlock
image6