我有一个Azure Redis缓存,并且有多个客户端正在使用它。缓存中的共享资源(密钥)很少需要互斥。我正在使用建议here的redlock算法。
我的要求是每个客户端都需要以互斥的方式访问共享资源。如果客户端无法获取资源上的锁定,那么它应该以30秒的间隔继续尝试获取锁定,直到获取它为止。为防止死锁,如果进程崩溃,锁定应在5分钟后过期。
我已经从github检查了redock.net的文档,但我不确定如何正确使用重试,等待和到期参数来达到上述标准。任何人都可以指导我这个方向吗?或者是否有其他详细的文件?
代码是用.NET编写的,所以我使用的是StackExchange.Redis和Redlock.net
答案 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开始,如果您希望能够摆脱等待获取锁定,您还可以提供取消令牌。