我使用RedLock.net库来锁定资源。为了锁定一个度假村,我正在使用RedLockFactory.CreateLockAsync。
public async Task<IRedLock> RedLockFactory.CreateLockAsync(string resource,
TimeSpan expiryTime,
TimeSpan waitTime,
TimeSpan retryTime,
CancellationToken? cancellationToken = null)据我所知,此方法将试图通过不断地重新尝试每个waitTime来获取retryTime的锁。但是,我不明白expiryTime的正确值是什么。一旦获得了锁,它将一直保存到锁为Disposed,而这与expiryTime无关。换句话说,即使expirtyTime被设置为5秒,如果锁在10秒后才被释放,那么锁将保持10秒。
在许多例子中,使用30的值是没有解释的。
我测试的值为0。锁根本得不到。
我用5毫秒的值进行了测试。获得一个锁,并将其保存到处置为止。
那么如何为expiryTime参数选择正确的值呢?在我看来,这个参数是不必要的,任何非零的正值都可以。
发布于 2021-08-20 22:34:45
ExpiryTime确定在发生故障时保持锁的最大时间(例如,保持锁崩溃的进程)。它还间接地决定了锁在持有时被更新的频率。
例如:
如果您将到期时间设置为10分钟:
上的锁。
如果将终止时间设置为10毫秒:
上的锁。
这是一种平衡:在失败情况下,您愿意等待锁过期的时间与在您的redis服务器上添加多少负载之间的平衡。
https://stackoverflow.com/questions/68855859
复制相似问题