2016-05-10 25 views
2

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

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

我已经从github检查了redock.net的文档,但我不确定如何正确使用retry,wait和expiry参数来达到上述标准。任何人都可以指导我朝那个方向走吗或者还有其他详细的文件可用吗?

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

回答

4

您可以使用下面的参数,以达到你想要的东西:

expiryTimeTimeSpan.FromMinutes(5)

这是RedLock.net将设置Redis密钥到期的时间,以防例如一个进程崩溃。如果过程仍然存在(本例中为2.5分钟),则每隔此时间段的一半时间过去,redis密钥过期将自动延长。由于锁定扩展计时器,如果您希望另一个进程能够在故障情况下更早接管,可以将到期时间设置得更短。

WAITTIMETimeSpan.MaxValue

这是长RedLock.net将如何坐下等待获得锁(在这种情况下,有效地永远)。

retryTimeTimeSpan.FromSeconds(30)

这是RedLock.net多久会重试之间等待其阻塞等待锁。

既然RedLock.net 1.7.0,你也可以提供一个取消令牌,如果你想能够打破等待获得锁。

+0

感谢您的回答。 –