2012-09-23 9 views
9

Ich verwende redis als meinen Sitzungsspeicher für eine node.js + express-App ... löscht sie automatisch alte Sitzungen, nachdem sie abgelaufen sind?löscht meine alten express.js Sitzungen wieder?

... oder muss ich auf der Serverseite etwas aufräumen? (So ​​der db wächst nicht zu groß)

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

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

Antwort

9

Ja, connect-redis wird Redis Ihre Sitzungen machen reinigen, wenn sie ablaufen.

Wenn ich mich richtig erinnere, ist das Standard-Session-Timeout 24 Stunden, was für mich eine ziemlich lange Zeit ist, etwas im Leerlauf zu halten, aber Sie können einen ttl Parameter zu konfigurieren (in Sekunden) wie lange Sie wollen Sitzungen, die aufbewahrt werden, bevor Redis sie ablehnt.

Wenn Sie sich selbst davon überzeugen möchten, dass Redis die Dinge für Sie erledigt, setzen Sie das Timeout auf 30 Sekunden und schauen Sie nach dem Timeout in Redis nach;

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

Die ttl Optionen ist here erwähnt, und es gibt einige kleinere zusätzliche Details darüber, wie es here mit anderen Optionen in Wechselwirkung tritt.

+0

ich mein Plätzchen nach 2 Wochen ausläuft, muss ich auch ttl zu 2 Wochen ändern, so dass sie aus redis werden nicht gelöscht? – chovy

+0

@chovy Ja, wenn Sie wirklich wollen, dass Redis die Sitzungen für 2 Wochen im Speicher hält, müssen Sie das tun. Vielleicht möchten Sie in einen hybriden Sitzungsspeicher schauen, Sitzungen in Redis behalten, die in den letzten paar Stunden aktiv waren, und sie für längere Sessions auf der Festplatte speichern, um Speicherplatz zu sparen. –

+0

Im zweiten Link, was Autor bedeutet durch "Hinzugefügt ttl Option, die vor Cookie maxAge kommt. Jetzt Sitzung TTL ist (options.ttl, cookie.maxAge, oneDay) was zuerst definiert." - Bedeutet das, dass es ttl auf alles setzt, was ich cookie.maxAge gesetzt habe? – chovy

4

Es funktioniert wie erwartet. Wenn ich eine Browser-Only-Sitzung mache (Cookie ablaufen, wenn User-Agent schließt), dann lebt sie 24 Stunden lang in redis (ich habe in connect-redis nicht die Option ttl gesetzt).

Wenn ich ein Cookie in 2 Wochen ablaufen lasse, lebt es 14 Tage lang in redis.

Sie können mit diesen Befehlen überprüfen:

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