首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Azure上的Redis创建分布式锁的推荐方法是什么?

使用Azure上的Redis创建分布式锁的推荐方法是什么?
EN

Stack Overflow用户
提问于 2016-01-08 16:01:33
回答 1查看 3.7K关注 0票数 2

我希望为我们的多实例工作者角色在Azure上的Redis中创建一个分布式锁。我需要一种创建“关键部分”的方法,其中只有一个线程可以一次访问多个Worker角色的实例。

我正在使用StackExchange.Redis客户端来完成这个任务,而且,它有一个事务性TakeLock\ReleaseLock 已经的实现,因此这个答案让我很好地了解了要使用的模式以及如何创建锁的详细信息。

进一步阅读主题时,我还阅读了这个关于拔起器的红色文章,它描述了在尝试实现分布式锁机制时基于故障转移的Redis节点的弱点。

Azure Redis缓存实现主/从故障转移(除了基本层之外),因此是否意味着我需要实现 redlock 模式,以确保只有一件事具有锁?e 213

此外,我还想知道:

  • 为什么Azure Redis示例连接字符串似乎没有列出主程序和从字符串?Azure是否以不同的方式实现了主/从故障转移?
  • 为什么红锁的一个.NET实现选择不支持在使用中使用主/从?(参见使用部分,第一段)这是出于选择还是因为主/从不是redlock的有效用法(在红色文章中似乎并非如此)
EN

回答 1

Stack Overflow用户

发布于 2016-01-25 17:20:32

我是你在问题中链接的RedLock.net库的作者。文档指定连接到独立的redis实例的原因是基于红系远程文件中的推理。通过强制只写入主节点,我们希望避免出现用户可能错误配置Redlock以连接到多个复制主机的情况。

根据Azure Redis Cache 103 -故障转移和监视,在Azure (在标准层及以上)前面有一个负载平衡器,它确保您始终连接到主服务器。

连接到多个redis实例(不管复制与否)应该提供一个相当好的保证,即不会有两个进程同时运行(比单个复制实例更多)。

为了让另一个进程在第一个进程完成之前“窃取”锁,超过一半的独立redis实例将需要丢失它们的锁键(例如,通过在不持久化的情况下重新启动),然后在进程中的计时器在扩展计时器期间重新获得锁之前,处理两个进程获得锁。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34681168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档