Я использую Redis с StackExchange.Redis. У меня есть несколько потоков, которые в какой-то момент будут получать доступ и редактировать значение одного и того же ключа, поэтому мне нужно синхронизировать манипуляции с данными.
Глядя на доступные функции, я вижу, что есть две функции: TakeLock и ReleaseLock. Тем не менее, эти функции принимают как ключ, так и параметр значения, а не ожидаемую единичную клавишу для блокировки. Документация и источник intellisene на GitHub не объясняют, как использовать функции LockTake и LockRelease или что нужно передать для параметров ключа и значения.
В: Какое правильное использование LockTake и LockRelease в StackExchange.Redis?
Пример псевдокода того, что я собираюсь сделать:
//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
//...
});