Ve větvi aktuální verze Redis (2.6) , nemůžete dostávat upozornění, když položkám vyprší platnost. S dalšími verzemi se to pravděpodobně změní.
Mezitím, abyste podpořili svůj požadavek, musíte ručně implementovat podporu upozornění na vypršení platnosti. Takže máte:
session:<sessionid> -> a hash storing your session data - one of the field is <userid>
user:<userid> -> a set of <sessionid>
Musíte odstranit sessionid
od uživatele nastaveného při vypršení platnosti relace. Můžete tedy udržovat další seřazenou sadu, jejíž skóre je časovým razítkem.
Když vytvoříte relaci 10 pro uživatele 100:
MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired <current timestamp + session timeout> 10
EXEC
Potom musíte sestavit démona, který bude dotazovat zset, aby určil, že relace vyprší (ZRANGEBYSCORE
). Pro každou relaci, která vypršela, musí zachovat strukturu dat:
- vypnout relaci ze souboru zset (
ZREMRANGEBYRANK
) - načíst uživatelské ID relace (
HMGET
) - smazat relaci (
DEL
) - odebrat relaci ze sady uživatelských id (
SREM
)
Hlavním problémem je zajistit, aby při dotazování a zpracování položek nedošlo k žádným rasovým podmínkám. Podívejte se na mou odpověď na tuto otázku, abyste viděli, jak ji lze implementovat:
jak zacházet s vypršením relace na základě redis?