欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RedLock算法与Redis集群模式分布式锁使用(Integration)

程序员文章站 2022-10-03 16:11:24
关于分布式锁的实现方式思路已经在上一篇文章写过了,一般是基于redis或者zookeeper实现的https://blog.csdn.net/qq_29569183/article/details/107885176但是真正应用中通常还要考虑redis和zookeeper集群环境下怎么去安全的实现一个分布式锁,因为在集群环境下存在多节点同步数据操作都可能会影响安全性,那么这篇文章就写一下如何基于redis集群模式使用分布式锁。redis集群分布式锁实现算法:RedLock算法为什么需要Red...

关于分布式锁的实现方式思路已经在上一篇文章写过了,一般是基于redis或者zookeeper实现的

https://blog.csdn.net/qq_29569183/article/details/107885176

但是真正应用中通常还要考虑redis和zookeeper集群环境下怎么去安全的实现一个分布式锁,因为在集群环境下存在多节点同步数据操作都可能会影响安全性,那么这篇文章就写一下如何基于redis集群模式使用分布式锁。

redis集群分布式锁实现算法:RedLock算法

为什么需要RedLock算法?

之前说的加锁方式都是加在一个redis节点上,但是在集群模式中就会有问题,比如下面的场景:

客户端A在Redis的master节点上拿到了锁;

master宕机,存储锁的key还没有来得及同步到Slave上;

master宕机引发故障转移,Slave节点升级为master节点;

客户端B执行加锁操作,它可以从新的Master获取到锁;

这种情况下,客户端A和客户端B同时持有了同一个资源的锁。锁的安全性被打破了;所以就需要新的方式保证安全。

RedLock算法的实现思路

获取当前时间的毫秒数;

按顺序依次向N个Redis节点执行获取锁的操作。为了保证在某个在某个Redis节点不可用的时候算法能够继续运行,这个获取锁的操作还需要一个远小于锁的过期时间的超时时间;

计算整个获取锁过程的总耗时。即当前时间减去第一步记录的时间。如果客户端从大多数Redis节点(多于N/2 +1)成功获取到锁,并且获取锁总共消耗的时间小于锁的过期时间(即T2<expireTime)。则认为客户端获取锁成功,否则,认为获取锁失败。如果获取锁成功,需要重新计算锁的过期时间。它等于最初锁的有效时间减去第三步计算出来获取锁消耗的时间,即expireTime - T2如果

本文地址:https://blog.csdn.net/qq_29569183/article/details/108035371