StackExchange.Redis LockTake и снятие блокировки

Я использую следующий код для блокировки и освобождения Redis

var key = "test-x";
RedisValue token = (RedisValue) Guid.NewGuid().ToString();
if(db.LockTake(key, token, duration)) {
    try {
        // you have the lock do work
    } finally {
        db.LockRelease(key, token);
    }
}

Моя проблема:

В модульном тесте я вызываю этот метод 2 раза. В первый раз всегда работает, но во второй раз, когда я хочу получить блокировку этого конкретного ключа, это не работает. Насколько я понимаю, db.LockRelease должен снимать блокировку, делая ее доступной для второго запроса. Я заметил, что db.LockRelease возвращает false.

Любая идея, что может происходить?


person Blottt    schedule 20.07.2015    source источник


Ответы (1)


Ключ блокировки должен быть уникальным. Вероятно, вы используете тот же ключ блокировки, что и ключ кэша в вашем коде. Из https://stackoverflow.com/a/25138164:

ключ (уникальное имя замка в базе данных)

person anthony cheung    schedule 27.08.2015