sql >> Databáze >  >> NoSQL >> Redis

Redis, vypršení platnosti relace a zpětné vyhledávání

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?



  1. Jaké jsou základní rozdíly mezi select, epoll, kqueue a evport?

  2. Jarní data MongoDb:MappingMongoConverter odstraňte _class

  3. Zobrazuje se mi chyba Třída 'Predis\Client' nebyla nalezena v Laravelu 5.2

  4. Je možné obsadit MongoDB-Query?