Skip to content

Latest commit

 

History

History
20 lines (12 loc) · 1.38 KB

File metadata and controls

20 lines (12 loc) · 1.38 KB

redis

redLock

集群环境下的分布式锁。 多个Master节点情况下, redLock 获取锁思想:

  1. 获取当前时间的毫秒数T1。

  2. 按顺序依次向N个 Master 节点执行获取锁的操作。为了保证在某个在某个Redis 节点不可用的时候算法能够继续运行,这个获取锁的操作还需要一个超时时间。它应该远小于锁的过期时间。客户端向某个节点获取锁失败后,应立即尝试下一个节点。这里失败包括 Master节点不可用或者该节点上的锁已经被其他客户端持有。

  3. 计算整个获取锁过程的总耗时。即当前时间减去第一步记录的时间。计算公司为T2=now()- T1。如果客户端从大多数Redis节点(>N/2 +1)成功获取到锁。并且获取锁总共消耗的时间小于锁的过期时间(即T2<expireTime)。则认为客户端获取锁成功,否则,认为获取锁失败

  4. 如果获取锁成功,需要重新计算锁的过期时间。它等于最初锁的有效时间减去第三步计算出来获取锁消耗的时间,即expireTime - T2

  5. 如果最终获取锁失败,那么客户端立即向所有 master 发起释放锁的操作。