2012-09-23 16 views
9

estoy usando redis como mi tienda de sesión para una aplicación node.js + express ... ¿eliminará automáticamente las sesiones antiguas después de que caduquen?¿volverá a eliminar mis viejas sesiones de express.js?

... ¿o tengo que hacer una limpieza en el lado del servidor? (Por lo que el PP no crece demasiado grande)

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

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

Respuesta

9

Sí, connect-redis hará Redis limpiar sus sesiones cuando expiran.

Si mal no recuerdo, el tiempo de espera predeterminado de la sesión es de 24 horas, lo que para mí es bastante tiempo para mantener algo inactivo en la memoria, pero puede darle un parámetro ttl para configurar (en segundos) cuánto tiempo desea el sesiones mantenidas antes de que Redis las expire.

Si quiere asegurarse de que Redis lo limpia, simplemente configure el tiempo de espera en 30 segundos y eche un vistazo a Redis después de que haya expirado el tiempo de espera;

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

Las opciones ttl se menciona here y hay un poco pequeño detalle adicional en la forma en que interactúa con otras opciones here.

+0

he de poner mi galleta de expirar después de 2 semanas, ¿Necesito cambiar TTL a 2 semanas demasiado para que no se borran de Redis? – chovy

+0

@chovy Sí, si realmente desea que Redis mantenga las sesiones en la memoria durante 2 semanas, tendrá que hacer eso. Es posible que desee buscar algún tipo de almacenamiento de sesión híbrido, mantener las sesiones en Redis que han estado activas durante las últimas horas y almacenarlas en el disco para sesiones inactivas durante más tiempo de lo que puede ser una buena idea para guardar algo de memoria. –

+0

En el segundo enlace, ¿qué quiere decir el autor con "Opción ttl agregada, que viene antes de la cookie maxAge. Ahora la sesión ttl es (options.ttl, cookie.maxAge, oneDay) lo que se haya definido primero". - ¿Eso significa que establecerá ttl en lo que establezca cookie.maxAge también? – chovy

4

Está funcionando como se esperaba. Si hago una sesión de solo navegador (caduca la cookie cuando el usuario-agente se cierra), entonces vive en redis durante 24 horas (no configuré una opción ttl en connect-redis).

Si configuro una cookie para caducar en 2 semanas, vive en redis durante 14 días.

Usted puede consultar con estos comandos:

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