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

Powiadomienia Redis:Uzyskaj klucz i wartość po wygaśnięciu

Funkcja, z którą połączył się Eli, umożliwia nasłuchiwanie wygaśnięcia klucza. Nie daje jednak wartości klucza. Co więcej, w oparciu o zgłoszony problem z githubem nie wygląda na to, abyś mógł oczekiwać, że ta funkcja zostanie wbudowana w najbliższym czasie, jeśli w ogóle (https://github.com/antirez/redis/issues/1876). Rozwiązaniem, którego używam, jest utworzenie specjalnego „cień” klucza wygasania, który jest powiązany z kluczem, w którym masz rzeczywistą wartość.

Powiedzmy, że masz klucz o nazwie testkey i ma wartość całkowitą 100 . Ponadto klucz wygaśnie po 10 sekundach, w którym chcesz uzyskać wartość klucza. (Może zwiększałeś klucz w ciągu 10 sekund jego istnienia).

Najpierw musisz skonfigurować nasłuchiwanie zdarzeń związanych z przestrzenią kluczową. W szczególności chcesz posłuchać expired wydarzenia. Możesz to zrobić ze swojej konfiguracji lub użyć config set polecenie w redis. (więcej informacji znajdziesz tutaj:http://redis.io/topics/notifications)

CONFIG SET notify-keyspace-events Ex

Teraz możesz zasubskrybować specjalne keyevent kanał, na którym zostaniesz powiadomiony o wygaśnięciu klucza.

SUBSCRIBE [email protected]__:expired

Format subskrybowanego kanału to [email protected]<db>__:<eventName> . W naszym przykładzie zakładamy, że pracujemy z domyślną bazą danych 0 i chcemy nasłuchiwać expired wydarzenie.

Gdy testkey wygasa, otrzymasz teraz wiadomość w __keyevent__ kanał, w którym wiadomość jest nazwą klucza, który wygasł. Oczywiście w tym momencie klucz zniknął, więc nie możemy już uzyskać dostępu do wartości! Rozwiązaniem jest użycie specjalnego klucza wygaśnięcia.

Kiedy tworzysz swój testkey utwórz również specjalny wygasający klucz "shadow" (nie wygasaj rzeczywistego testkey ). Na przykład:

SET testkey 100
SET shadowkey:testkey "" EX 10

Teraz w [email protected]__:expired kanał otrzymasz wiadomość z informacją, że klucz shadowkey:testkey wygasły. Weź wartość wiadomości (która jest nazwą klucza), podziel na dwukropek (lub inny separator, który zdecydujesz się użyć), a następnie ręcznie pobierz wartość klucza i usuń go.

// set your key value
SET testkey 100 
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:testkey "" EX 10 
// Get an expiration message in the channel [email protected]__:expired
// Split the key on ":", take the second part to get your original key
// Then get the value and do whatever with it
GET testkey
// Then delete the key
DEL testkey

Zauważ, że wartość shadowkey nie jest używana, więc chcesz użyć najmniejszej możliwej wartości, która zgodnie z tą odpowiedzią (klucz sklepu Redis bez wartości) jest pustym ciągiem "" . Konfiguracja wymaga trochę więcej pracy, ale powyższy system robi dokładnie to, czego potrzebujesz. Narzutem jest kilka dodatkowych poleceń, aby faktycznie pobrać i usunąć klucz, plus koszt przechowywania pustego klucza.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. nie można połączyć się z kontenerem redis z kontenera aplikacji

  2. Odświeżenie klastra redis [ERR] Wywołanie MIGRATE:ERR Błąd składni

  3. Jak wyczyścić Heroku Redis?

  4. Dostęp do zmiennej w wątku rails

  5. Redis publikuj-subskrybuj:czy Redis gwarantuje dostarczenie wiadomości nawet przy ogromnym stresie?