2012-09-23 12 views
9

Używam redis jako mojego magazynu sesji dla aplikacji node.js + express ... czy automatycznie usunie stare sesje po ich wygaśnięciu?czy redis usunie moje stare sesje express.js?

... lub czy trzeba wykonać czyszczenie po stronie serwera? (Tak db nie rośnie zbyt duży)

var RedisStore = require('connect-redis')(express) 

    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'foobar' 
    })); 

Odpowiedz

9

Tak, connect-redis uczyni Redis oczyścić swoje sesje po ich wygaśnięciu.

Jeśli dobrze pamiętam, domyślny limit czasu sesji wynosi 24 godziny, co dla mnie jest dość długim czasem, aby zachować w pamięci coś bezużytecznego, ale możesz podać mu parametr ttl, aby skonfigurować (w sekundach), jak długo chcesz sesje prowadzone przed wygaśnięciem ich przez Redis.

Jeśli chcesz się upewnić, że Redis coś dla ciebie sprząta, ustaw czas oczekiwania na 30 sekund i po upływie czasu oczekiwania sprawdź w Redis;

app.use(express.session({ 
    store: new RedisStore({ 
    host: cfg.redis.host, 
    db: cfg.redis.db, 
    ttl: 30 
    }), 
    secret: 'foobar' 
})); 

W ttl opcje wspomina here i istnieją pewne drobne dodatkowy szczegół, w jaki sposób współdziała z innymi opcjami here.

+0

mogę ustawić plik cookie wygasa po 2 tygodniach, muszę zmienić TTL do 2 tygodni zbyt więc nie zostaną usunięte z REDiS? – chovy

+0

@chovy Tak, jeśli naprawdę chcesz, aby Redis utrzymywał sesje w pamięci przez 2 tygodnie, musisz to zrobić. Możesz jednak zajrzeć do pewnego rodzaju sesji sesji hybrydowych, utrzymując sesje w Redis, które były aktywne przez ostatnie kilka godzin i przechowując je na dysku w sesjach bezczynności dłużej niż może być dobrym pomysłem na zaoszczędzenie pamięci. –

+0

W drugim linku, co autor oznacza przez "Dodano opcję ttl, która przychodzi przed ciasteczką maxAge.Teraz sesja ttl jest (options.ttl, cookie.maxAge, oneDay), w zależności od tego, co zdefiniowano jako pierwsze." - czy to znaczy, że ustawi ttl na wszystko, co ustawię cookie.maxAge? – chovy

4

Działa zgodnie z oczekiwaniami. Jeśli wykonuję sesję tylko dla przeglądarki (wygasa ciasteczko po zamknięciu klienta użytkownika), to on żyje w trybie redis przez 24 godziny (nie ustawiłem opcji ttl w connect-redis).

Jeśli ustawię plik cookie, który wygaśnie za 2 tygodnie, będzie on działał przez 14 dni.

Można sprawdzić z tych poleceń:

start redis-cli 
> keys * 
> ttl <key>