使用Redlocks获取Azure Redis缓存上的锁定

时间:2016-05-10 18:13:52

标签: azure redis stackexchange.redis azure-redis-cache

我有一个Azure Redis缓存,并且有多个客户端正在使用它。缓存中的共享资源(密钥)很少需要互斥。我正在使用建议here的redlock算法。

我的要求是每个客户端都需要以互斥的方式访问共享资源。如果客户端无法获取资源上的锁定,那么它应该以30秒的间隔继续尝试获取锁定,直到获取它为止。为防止死锁,如果进程崩溃,锁定应在5分钟后过期。

我已经从github检查了redock.net的文档,但我不确定如何正确使用重试,等待和到期参数来达到上述标准。任何人都可以指导我这个方向吗?或者是否有其他详细的文件?

代码是用.NET编写的,所以我使用的是StackExchange.Redis和Redlock.net

1 个答案:

答案 0 :(得分:5)

您可以使用以下参数来实现您的目标:

到期时间TimeSpan.FromMinutes(5)

这是RedLock.net将redis密钥到期时间设置为多长时间,例如进程崩溃。如果进程仍然存活(在这种情况下为2.5分钟),则每次该时间段的一半时间内,redis密钥到期将自动延长。由于锁定扩展计时器,如果您希望其他进程能够在故障情况下更快地接管,则可以将到期时间设置得更短。

waitTime TimeSpan.MaxValue

这是RedLock.net等待锁定的时间(在这种情况下,有效地永远)。

重试时间TimeSpan.FromSeconds(30)

这是RedLock.net在等待锁定等待重试之间等待的时间。

从RedLock.net 1.7.0开始,如果您希望能够摆脱等待获取锁定,您还可以提供取消令牌。