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

Using Redlocks to acquire lock on Azure Redis Cache

我有一个 Azure Redis 缓存,多个客户端正在使用它。缓存中的共享资源(键)很少需要互斥。我正在使用提议的红锁算法 here.

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

我已经查看了 github 的 redock.net 的文档,但我不确定如何正确使用重试、等待和到期参数来实现上述标准。谁能指导我朝那个方向发展?或者还有其他详细的文档吗?

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

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

过期时间: TimeSpan.FromMinutes(5)

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

等待时间TimeSpan.MaxValue

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

重试时间: TimeSpan.FromSeconds(30)

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

从 RedLock.net 1.7.0 开始,如果您希望能够从等待获取锁中解脱出来,您还可以提供一个取消令牌。