我希望为我们的多实例工作者角色在Azure上的Redis中创建一个分布式锁。我需要一种创建“关键部分”的方法,其中只有一个线程可以一次访问多个Worker角色的实例。
我正在使用StackExchange.Redis客户端来完成这个任务,而且,它有一个事务性TakeLock\ReleaseLock 已经的实现,因此这个答案让我很好地了解了要使用的模式以及如何创建锁的详细信息。
进一步阅读主题时,我还阅读了这个关于拔起器的红色文章,它描述了在尝试实现分布式锁机制时基于故障转移的Redis节点的弱点。
Azure Redis缓存实现主/从故障转移(除了基本层之外),因此是否意味着我需要实现 redlock 模式,以确保只有一件事具有锁?e 213
此外,我还想知道:
发布于 2016-01-25 17:20:32
我是你在问题中链接的RedLock.net库的作者。文档指定连接到独立的redis实例的原因是基于红系远程文件中的推理。通过强制只写入主节点,我们希望避免出现用户可能错误配置Redlock以连接到多个复制主机的情况。
根据Azure Redis Cache 103 -故障转移和监视,在Azure (在标准层及以上)前面有一个负载平衡器,它确保您始终连接到主服务器。
连接到多个redis实例(不管复制与否)应该提供一个相当好的保证,即不会有两个进程同时运行(比单个复制实例更多)。
为了让另一个进程在第一个进程完成之前“窃取”锁,超过一半的独立redis实例将需要丢失它们的锁键(例如,通过在不持久化的情况下重新启动),然后在进程中的计时器在扩展计时器期间重新获得锁之前,处理两个进程获得锁。
https://stackoverflow.com/questions/34681168
复制相似问题