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

Redis, wygaśnięcie sesji i wyszukiwanie wsteczne

W bieżącej gałęzi wydania Redis (2.6) , nie możesz otrzymywać powiadomień o wygaśnięciu przedmiotów. Prawdopodobnie zmieni się w kolejnych wersjach.

W międzyczasie, aby spełnić swoje wymagania, musisz ręcznie zaimplementować obsługę powiadomień o wygaśnięciu. Masz więc:

session:<sessionid> -> a hash storing your session data - one of the field is <userid>
user:<userid> -> a set of <sessionid>

Musisz usunąć sessionid od użytkownika ustawionego po wygaśnięciu sesji. Możesz więc zachować dodatkowy posortowany zestaw, którego wynik jest znacznikiem czasu.

Podczas tworzenia sesji 10 dla użytkownika 100:

MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired <current timestamp + session timeout> 10
EXEC

Następnie musisz zbudować demona, który odpytuje zset, aby zidentyfikować sesję do wygaśnięcia (ZRANGEBYSCORE ). Dla każdej wygasłej sesji musi zachować strukturę danych:

  • wyjmij sesję z zestawu zset (ZREMRANGEBYRANK )
  • pobierz identyfikator użytkownika sesji (HMGET )
  • usuń sesję (DEL )
  • usuń sesję z zestawu identyfikatorów użytkownika (SREM )

Główną trudnością jest upewnienie się, że nie ma warunków wyścigu, gdy demon odpytuje i przetwarza przedmioty. Zobacz moją odpowiedź na to pytanie, aby zobaczyć, jak można ją wdrożyć:

jak obsłużyć wygaśnięcie sesji w oparciu o redis?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DisabledBackend:nieprawidłowe zachowanie z selerem, redis i flask

  2. Dobry sposób na użycie socket.io z klastrem na serwerze wielordzeniowym?

  3. Chcesz zaimplementować gniazda sieciowe w Laravel

  4. Railsy, ​​jak sprawdzić, czy pracownik sidekiq skończył z perform_async

  5. Przechowywanie wartości zwracanej przez node.js setTimeout w redis