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

Redis, изтичане на сесията и обратно търсене

В текущата версия на клон на Redis (2.6) , не можете да получавате известия, когато артикулите са изтекли. Вероятно ще се промени със следващите версии.

Междувременно, за да подкрепите вашето изискване, трябва ръчно да внедрите поддръжка за известия за изтичане. Значи имате:

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

Трябва да премахнете sessionid от потребителския набор, когато сесията изтече. Така че можете да поддържате допълнителен сортиран набор, чийто резултат е времеви печат.

Когато създавате сесия 10 за потребител 100:

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

След това трябва да създадете демон, който ще анкетира zset, за да идентифицира сесията да изтече (ZRANGEBYSCORE ). За всяка изтекла сесия трябва да поддържа структурата на данните:

  • извадете сесията от zset (ZREMRANGEBYRANK )
  • извличане на потребителския идентификатор на сесията (HMGET )
  • изтриване на сесия (DEL )
  • премахване на сесията от набора потребителски идентификатори (SREM )

Основната трудност е да се гарантира, че няма условия за състезание, когато демонът анкетира и обработва елементите. Вижте моя отговор на този въпрос, за да видите как може да бъде приложен:

как да се справя с изтичането на сесията, базирайки се на redis?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как ефективно да вмъкнете милиард данни в Redis?

  2. Какъв е най-добрият начин да използвате Redis в многонишкова Rails среда? (Пума / Сидекик)

  3. Защо ключовете Redis не изтичат?

  4. Връзката с Redis клъстер не бе успешно

  5. Django Celery не може да запитва postgres db вътре в задачата