sql >> Databasteknik >  >> NoSQL >> Redis

Redis, sessionsutgång och omvänd sökning

På den aktuella versionen av Redis (2.6) , du kan inte få aviseringar när objekt har gått ut. Det kommer förmodligen att ändras med nästa versioner.

Under tiden, för att stödja ditt krav, måste du manuellt implementera stöd för utgångsmeddelanden. Så du har:

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

Du måste ta bort sessionid från användarinställningen när sessionen löper ut. Så du kan behålla en extra sorterad uppsättning vars poäng är en tidsstämpel.

När du skapar session 10 för användare 100:

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

Sedan måste du bygga en demon som kommer att polla zset för att identifiera sessionen som ska löpa ut (ZRANGEBYSCORE ). För varje utgången session måste den upprätthålla datastrukturen:

  • skjuta ut sessionen från zset (ZREMRANGEBYRANK )
  • hämta sessionsanvändar-id (HMGET )
  • ta bort session (DEL )
  • ta bort session från användar-ID-uppsättning (SREM )

Den största svårigheten är att se till att det inte finns några tävlingsförhållanden när demonen pollar och bearbetar föremålen. Se mitt svar på denna fråga för att se hur det kan implementeras:

hur hanterar man session expire baserat på redis?



  1. StackExchange.Redis enkelt C# Exempel

  2. Hitta dubbletter av webbadresser i mongodb

  3. Hur man uppdaterar ett arrayvärde i Mongoose

  4. Logstash Web UI startar inte