2016-05-10 9 views
2

Ich habe einen Azure Redis Cache und mehrere Clients verwenden ihn. Nur wenige der freigegebenen Ressourcen (Schlüssel) im Cache müssen sich gegenseitig ausschließen. Ich verwende den Redlock-Algorithmus wie vorgeschlagen here.Verwenden von Redlocks, um die Sperre für Azure Redis Cache zu aktivieren

Meine Anforderung ist, dass jeder Client auf die gemeinsamen Ressourcen zugreifen muss, aber in einer gegenseitig ausschließenden Weise. Wenn ein Client eine Sperre für eine Ressource nicht erfassen kann, sollte er versuchen, die Sperre in einem Intervall von 30 Sekunden zu erfassen, bis er sie erwirbt. Um Deadlocks zu verhindern, sollte im Falle eines Absturzes eine Sperre nach 5 Minuten ablaufen.

Ich habe die Dokumentation von redock.net von github überprüft, aber ich bin mir nicht sicher, wie die Wiederholungs-, Warte- und Ablaufparameter korrekt verwendet werden, um die oben genannten Kriterien zu erreichen. Kann mich jemand in diese Richtung führen? Oder gibt es eine andere detaillierte Dokumentation?

ist der Code in .NET geschrieben, so StackExchange.Redis und Redlock.net Ich bin mit

Antwort

4

können Sie die folgenden Parameter verwenden, um zu erreichen, was Sie wollen:

ExpiryTime: TimeSpan.FromMinutes(5)

So lange legt RedLock.net den Rediskey-Ablauf fest, z ein Prozessabsturz. Der Ablauf des Redis-Schlüssels wird automatisch jedes Mal verlängert, wenn die Hälfte des Zeitraums verstrichen ist, wenn der Prozess noch läuft (in diesem Fall 2,5 Minuten). Sie können die Ablaufzeit aufgrund des Sperrerweiterungstimers kürzer festlegen, wenn Sie möchten, dass ein anderer Prozess im Fehlerfall schneller übernehmen kann.

waittime: TimeSpan.MaxValue

Dies ist, wie lange RedLock.net wartet sitzen, um die Sperre zu erhalten (in diesem Fall effektiv für immer).

RetryTime: TimeSpan.FromSeconds(30)

Dies ist, wie lange RedLock.net zwischen Wiederholungen warten, während es für die Sperre warten blockiert wird.

Seit RedLock.net 1.7.0 können Sie auch ein Storno-Token zur Verfügung stellen, wenn Sie aus dem Warten auf eine Sperre ausbrechen wollen.

+0

danke für deine antwort. –