Redis
 sql >> база данни >  >> NoSQL >> Redis

StackExchange.Redis - Използване на LockTake / LockRelease

Ключалката има 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 са атомарни, така че не е нужно да се притеснявате за две дискретни операции, които се конкурират. За по-сложни единици с няколко операции, транзакции и скриптиране са опции.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Функция на клавишите Redis за съвпадение с множество шаблони

  2. Redis, слушане на pubsub събития и превръщането им в поток за по-надеждно потребление

  3. Redis публикува-абонирайте се:Гарантирано ли е Redis да достави съобщението дори при огромен стрес?

  4. Сравняване на 64-битово число със знак с помощта на 32-битови операции в Lua

  5. Microsoft.Extensions.Caching.Redis избира различна база данни от db0