2013-02-01 8 views
15

Zastanawiam się, czy istnieje funkcja redis, która pozwala mi uzyskać wszystkie wygasłe klucze (mam na myśli jakieś wydarzenie, które daje mi możliwość odebrania wszystkich wygasłych rekordów). Celem tego jest zapisanie starych wartości w innej bazie danych. Słyszałem, że jest to możliwe dzięki mechanizmowi publikowania, ale Google nie może pomóc nam z tym pomysłem.Zdarzenie na klucz wygasa

+0

to nie to samo, co link powyższego komentarza. ta dotyczy sesji. ten post dotyczy zmiennych kluczy. – akonsu

Odpowiedz

18

Obecna wersja rozwojowa redis zawiera nową funkcję: powiadomienia o obszarach kluczowych. Dokumentacja: http://redis.io/topics/notifications

KEYSPACE powiadomień pozwala klientom do subskrypcji Pub/Sub kanałów w celu uzyskania zdarzeń mających wpływ na dane Redis określone w jakiś sposób.

Przykłady zdarzeń, które jest możliwe do otrzymania są następujące:

  • Wszystkie polecenia wpływające na dany klucz.
  • Wszystkie klawisze odbierające operację LPUSH.
  • Wszystkie klucze wygasające w bazie 0.

Mamy nadzieję, że pozwoli on na stabilną wkrótce.

Przy okazji, nie będzie to zbyt pomocne przy zapisywaniu wartości wygasłych kluczy. Po uruchomieniu zdarzenia utraty ważności wartość już zniknęła.

9

Wbudowane wygasłe zdarzenie generowane przez powiadomienie o obszarze kluczy nie jest dokładne. Zobacz ostatni odcinek http://redis.io/topics/notifications

Keys z czas życia są związane wygasł przez Redis na dwa sposoby:

  1. Gdy klucz jest używany przez polecenia i znajduje się wygasły.

  2. poprzez system, który wygląda na tle przeterminowanych kluczy w tle, stopniowo, aby móc także zbierać klucze, które nigdy nie są dostępne.

W przeterminowane zdarzenia są generowane gdy klawisz jest dostępny i znajduje się ważność przez jeden z powyższych systemów, wskutek tam ma gwarancji, że serwer Redis będzie w stanie wygenerować wydarzenie, które wygasło w momencie, gdy kluczowy czas życia osiągnie wartość zerową: . Jeśli żadne polecenie nie jest ustawione na klucz w sposób ciągły i istnieje wiele kluczy z powiązanym TTL, może wystąpić znaczące opóźnienie między , gdy czas kluczowania do życia spadnie do zera, a czasem wygasłby zdarzenie .

Aby w pełni zaimplementować zdarzenie wygaśnięcia, być może trzeba będzie je wdrożyć samodzielnie. Na przykład za pomocą posortowanej listy (lub drzewa AVL) posortowanej według czasu wygaśnięcia i nieprzerwanie czytając ogon listy (odznacz). Jeśli czytelnik stwierdzi, że czas wygaśnięcia nie został osiągnięty, śpi (czas wygaśnięcia - teraz). W ten sposób dokładność można kontrolować w ciągu 10 sekund.