Redis
 sql >> Baza danych >  >> NoSQL >> Redis

StackExchange.Redis — użycie LockTake / LockRelease

Zamek składa się z 3 części:

  • klucz (unikalna nazwa zamka w bazie danych)
  • wartość (token zdefiniowany przez wywołującego, który może być użyty zarówno do wskazania, kto jest „właścicielem” blokady, jak i do sprawdzenia, czy zwalnianie i przedłużanie blokady odbywa się prawidłowo)
  • czas trwania (blokada celowo jest kwestią skończonego czasu trwania)

Jeśli żadna inna wartość nie przychodzi do głowy, przewodnik może stworzyć odpowiednią „wartość”. Zwykle używamy nazwy maszyny (lub zmodyfikowanej wersji nazwy maszyny, jeśli wiele procesów może konkurować na tej samej maszynie).

Pamiętaj też, że wzięcie blokady jest spekulacją , a nie blokowanie . Całkowicie możliwe, że zawiedziesz aby uzyskać blokadę, dlatego może być konieczne przetestowanie tego i być może dodanie logiki ponawiania próby.

Typowym przykładem może być:

RedisValue token = Environment.MachineName;
if(db.LockTake(key, token, duration)) {
    try {
        // you have the lock do work
    } finally {
        db.LockRelease(key, token);
    }
}

Zauważ, że jeśli praca jest długa (w szczególności pętla), możesz chcieć dodać sporadycznie LockExtend dzwoni w środku - ponownie pamiętając o sprawdzeniu powodzenia (na wypadek przekroczenia limitu czasu).

Pamiętaj też, że wszystkie poszczególne polecenia redis są atomowe, więc nie musisz się martwić, że dwie dyskretne operacje będą rywalizować. Aby uzyskać bardziej złożone jednostki wielooperacyjne, transakcje i skrypty są opcje.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. skonfiguruj autoryzację redis na sidekiq

  2. Nie można połączyć się z Redis o 10.XX.XX.28:6379:Nieznany błąd — podczas uzyskiwania dostępu z Spring Batch lub komputera z systemem Windows

  3. Używanie Redis do buforowania wyników SQL

  4. Funkcja Google Cloud wygasa podczas łączenia się z Redis przez wewnętrzny adres IP Compute Engine

  5. phpMyAdmin odpowiednik MySQL dla Redis?