现在的位置: 首页 > 算法 > 正文

关于Redlock算法过程

2020年01月06日 算法 ⁄ 共 649字 ⁄ 字号 评论关闭

  Redlock算法是Antirez在单Redis节点基础上引入的高可用模式。

关于Redlock算法过程

  在Redis的分布式环境中,我们假设有N个完全互相独立的Redis节点,在N个Redis实例上使用与在Redis单实例下相同方法获取锁和释放锁。

  现在假设有5个Redis主节点(大于3的奇数个),这样基本保证他们不会同时都宕掉。

  获取锁和释放锁的过程中,客户端会执行以下操作:

  1.获取当前Unix时间,以毫秒为单位

  2.依次尝试从5个实例,使用相同的key和具有唯一性的value获取锁

  当向Redis请求获取锁时,客户端应该设置一个网络连接和响应超时时间,这个超时时间应该小于锁的失效时间,这样可以避免客户端死等

  3.客户端使用当前时间减去开始获取锁时间就得到获取锁使用的时间。当且仅当从半数以上的Redis节点取到锁,并且使用的时间小于锁失效时间时,锁才算获取成功

  4.如果取到了锁,key的真正有效时间等于有效时间减去获取锁所使用的时间,这个很重要

  5.如果因为某些原因,获取锁失败(没有在半数以上实例取到锁或者取锁时间已经超过了有效时间),客户端应该在所有的Redis实例上进行解锁,无论Redis实例是否加锁成功,因为可能服务端响应消息丢失了但是实际成功了,毕竟多释放一次也不会有问题

  上述的5个步骤是Redlock算法的重要过程,也是面试的热点,有心的读者还是记录一下吧!

  结束语:以上就是关于关于Redlock算法过程的全部内容,更多内容请关注学步园。

抱歉!评论已关闭.