2016-05-10 23 views
2

我有一個Azure Redis緩存,並且多個客戶端正在使用它。緩存中的少數共享資源(密鑰)需要互斥。我正在使用建議的here的redlock算法。使用Redlock獲取Azure Redis緩存鎖定

我的要求是,每個客戶端需要訪問共享資源,但以互斥的方式。如果客戶端無法獲取資源上的鎖定,那麼它應該持續嘗試獲取該鎖定,間隔爲30秒,直到獲取該鎖定爲止。爲防止死鎖,萬一進程崩潰,鎖應在5分鐘後過期。

我已經從github檢查了redock.net的文檔,但我不確定如何正確使用retry,wait和expiry參數來達到上述標準。任何人都可以指導我朝那個方向走嗎或者還有其他詳細的文件可用嗎?

的代碼是寫在.NET所以我用StackExchange.Redis和Redlock.net

回答

4

您可以使用下面的參數,以達到你想要的東西:

expiryTimeTimeSpan.FromMinutes(5)

這是RedLock.net將設置Redis密鑰到期的時間,以防例如一個進程崩潰。如果過程仍然存在(本例中爲2.5分鐘),則每隔此時間段的一半時間過去,redis密鑰過期將自動延長。由於鎖定擴展計時器,如果您希望另一個進程能夠在故障情況下更早接管,可以將到期時間設置得更短。

WAITTIMETimeSpan.MaxValue

這是長RedLock.net將如何坐下等待獲得鎖(在這種情況下,有效地永遠)。

retryTimeTimeSpan.FromSeconds(30)

這是RedLock.net多久會重試之間等待其阻塞等待鎖。

既然RedLock.net 1.7.0,你也可以提供一個取消令牌,如果你想能夠打破等待獲得鎖。

+0

感謝您的回答。 –