3

我有一个 Azure Redis 缓存,并且多个客户端正在使用它。缓存中的共享资源(键)很少需要互斥。我正在使用这里提出的 redlock 算法。

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

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

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

4

1 回答 1

8

您可以使用以下参数来实现您想要的:

到期时间TimeSpan.FromMinutes(5)

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

等待时间:TimeSpan.MaxValue

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

重试时间TimeSpan.FromSeconds(30)

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

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

于 2016-05-19T16:58:06.317 回答