В текущата версия на клон на 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?