Ключалката има 3 части:
- ключът (уникалното име на ключалката в базата данни)
- стойността (дефиниран от обаждащия токен, който може да се използва както за указване на кой „притежава“ ключалката, така и за проверка дали освобождаването и удължаването на заключването се извършва правилно)
- продължителността (заключването умишлено е нещо с ограничена продължителност)
Ако не ви хрумне друга стойност, гид може да направи подходяща "стойност". Склонни сме да използваме името на машината (или разменена версия на името на машината, ако няколко процеса могат да се конкурират на една и съща машина).
Също така имайте предвид, че вземането на заключване е спекулативно , а не блокиране . Напълно възможно е да успеете за да получите заключването и следователно може да се наложи да тествате за това и може би да добавите логика за повторен опит.
Типичен пример може да бъде:
RedisValue token = Environment.MachineName;
if(db.LockTake(key, token, duration)) {
try {
// you have the lock do work
} finally {
db.LockRelease(key, token);
}
}
Имайте предвид, че ако работата е дълга (в частност цикъл), може да искате да добавите от време на време LockExtend
повиквания по средата - отново не забравяйте да проверите за успех (в случай, че времето за изчакване изтече).
Имайте предвид също, че всички отделните команди на redis са атомарни, така че не е нужно да се притеснявате за две дискретни операции, които се конкурират. За по-сложни единици с няколко операции, транзакции и скриптиране са опции.