StackExchange.Redis - Verwendung von LockTake / LockRelease
Ich verwende Redis mit StackExchange.Redis. Ich habe mehrere Threads, die irgendwann auf den Wert desselben Schlüssels zugreifen und diesen bearbeiten. Daher muss ich die Manipulation der Daten synchronisieren.
Wenn ich mir die verfügbaren Funktionen anschaue, sehe ich, dass es zwei Funktionen gibt, TakeLock und ReleaseLock. Diese Funktionen benötigen jedoch sowohl einen Schlüssel- als auch einen Wertparameter und nicht den erwarteten einzelnen zu sperrenden Schlüssel. In der Intellisene-Dokumentation und -Quelle auf GitHub wird nicht erläutert, wie die LockTake- und LockRelease-Funktionen verwendet werden oder was für die Schlüssel- und Wertparameter übergeben werden muss.
F: Was ist die korrekte Verwendung von LockTake und LockRelease in StackExchange.Redis?
Pseudocode-Beispiel für das, was ich vorhabe:
//Add Items Before Parallel Execution
redis.StringSet("myJSONKey", myJSON);
//Parallel Execution
Parallel.For(0, 100, i =>
{
//Some work here
//....
//Lock
redis.LockTake("myJSONKey");
//Manipulate
var myJSONObject = redis.StringGet("myJSONKey");
myJSONObject.Total++;
Console.WriteLine(myJSONObject.Total);
redis.StringSet("myJSONKey", myNewJSON);
//Unlock
redis.LockRelease("myJSONKey");
//More work here
//...
});