我有一个和多个客户正在使用它。缓存中很少有共享资源(密钥)需要相互排斥。我正在使用redlock算法作为建议的这里。
我的要求是,每个客户端都需要访问共享资源,但要以相互排斥的方式访问。如果客户端无法获取资源上的锁,则应继续尝试获取该锁,间隔30秒,直到获得锁为止。为了防止死锁,在进程崩溃的情况下,锁应在5分钟后过期。
我已经检查了来自redock.net的github文档,但是我不知道如何正确地使用retry、wait和use参数来达到上述标准。有人能指引我朝那个方向走吗?或是否有其他详细文件可供使用?
代码是用.NET编写的,所以我使用StackExchange.Redis和Redlock.net
发布于 2016-05-19 16:58:06
您可以使用下列参数来实现您想要的结果:
expiryTime:TimeSpan.FromMinutes(5)
这是在进程崩溃的情况下,RedLock.net会将redis键过期设置为多长时间。如果进程仍在运行(在此情况下为2.5分钟),每次此时间段的一半时间过去时,redis密钥到期将自动延长。由于使用了锁扩展计时器,如果希望另一个进程能够在故障情况下更早地接管,则可以将过期时间设置得更短。
waitTime:TimeSpan.MaxValue
这是RedLock.net等待获得锁的时间(在这种情况下,实际上是永久的)。
retryTime:TimeSpan.FromSeconds(30)
这是RedLock.net在等待锁被阻塞时在重试之间等待的时间。
由于RedLock.net 1.7.0,您还可以提供一个取消令牌,如果您希望能够突破等待锁被获得。
https://stackoverflow.com/questions/37146037
复制相似问题