2016-05-10 12 views
2

Azure Redis Cacheがあり、複数のクライアントがそれを使用しています。キャッシュ内の共有リソース(キー)は、相互に排他的である必要はほとんどありません。私は提案されたようにredlockアルゴリズムを使用していますhereRedlockを使用してAzure Redis Cacheでロックを取得する

私の要件は、各クライアントが共有リソースにアクセスする必要がありますが、相互に排他的な方法です。クライアントがリソース上のロックを取得できない場合、クライアントは取得するまで30秒間隔でロックを取得しようとする必要があります。デッドロックを防ぐために、プロセスがクラッシュした場合、ロックは5分後に失効する必要があります。

redock.netのドキュメントをgithubから確認しましたが、上記の基準を達成するために再試行、待機、有効期限のパラメータを正しく使用する方法がわかりません。誰かが私をその方向に導くことができますか?または、その他の詳細な文書がありますか?

コードはので、私はStackExchange.RedisとRedlock.net

を使用しています.NETで書かれている

答えて

4
あなたが望むものを達成するために、次のパラメータを使用することができ

expiryTimeを:TimeSpan.FromMinutes(5)

これは、RedLock.netがredisキーの有効期限をどのくらい長く設定するかを示します。プロセスクラッシュプロセスがまだ生存している場合(この場合は2.5分)、この期間の半分が経過するたびに、期限切れの有効期限が自動的に延長されます。ロック延長タイマーのために、障害の場合に他のプロセスを早期に引き継ぐことができるようにするには、有効期限を短く設定することができます。

WAITTIMETimeSpan.MaxValue

これは長いRedLock.netは(事実上永遠に、このケースでは)ロックを取得するために待って座ってする方法です。

RETRYTIMETimeSpan.FromSeconds(30)

これは、それがロックを待機してブロックされている間RedLock.netが再試行の間で待機する時間です。

RedLock.net 1.7.0以降では、ロックを取得するのを待って脱出できるようにしたい場合は、キャンセルトークンを提供することもできます。

+0

あなたの答えに感謝します。 –

関連する問題