如何使用redis群集创建分布式锁

时间:2017-09-27 03:06:18

标签: redis distributed-computing consensus

背景

我实现了一个redis客户端(支持集群),并且提出了一个问题,以支持redis集群对分布式锁的支持。

我已阅读过redlock算法和相关辩论的帖子

问题

实际上,不可能将一个密钥散列到redis集群中的不同节点,并且很难在特定规则中生成密钥,并确保它们不会在集群中迁移。在最坏的情况下,所有密钥槽可能存在于一个节点中。然后,可用性将与一个节点中的一个密钥相同。

我的算法

我的解决方案是利用READONLY模式的奴隶来确保 锁定密钥从主设备同步到其从设备的N / 2 + 1,以避免故障转移问题。 由于它是一个单键解决方案,迁移问题也无所谓。

  1. 随机令牌+ SETNX +在群集主节点中获取锁定的到期时间
  2. 如果成功获取锁定,则使用READONLY模式检查从属节点中的锁定(可能有N个从属节点),如果N / 2 + 1同步成功则打破检查并返回True
  3. 使用redlock算法中描述的lua脚本释放与具有随机生成的令牌的客户端的锁定,如果客户端崩溃,则等待锁定密钥到期。
  4. 你能帮我一个忙,看看算法是不是错了? 我曾经想过几个关于它的案例,但我仍然不太确定。

0 个答案:

没有答案