当前位置: 移动技术网 > IT编程>开发语言>.net > RedLock算法与Redis集群模式分布式锁使用(Integration)

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

2020年08月17日  | 移动技术网IT编程  | 我要评论
关于分布式锁的实现方式思路已经在上一篇文章写过了,一般是基于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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网