超时释放

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

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

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

0a4dd1e3d09f12daf9b828e6b353888606164c2c

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

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

Redlock算法
6bcc1f7f1ee66786baf7b2fba23744c2c37ab366

源码:

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

2.核心方法: trylock

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

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

3.unlock
05b5a05e18f2b9056000ac3ee5709665933ea728