Saltar al contenido

Redis, caducidad de la sesión y búsqueda inversa

No dudes en divulgar nuestra página y códigos con tus amigos, ayúdanos a ampliar nuestra comunidad.

Solución:

En la rama de versión actual de redis (2.6), no puede recibir notificaciones cuando los artículos caducan. Probablemente cambiará con las próximas versiones.

Mientras tanto, para cumplir con su requisito, debe implementar manualmente el soporte de notificación de caducidad. Así que tienes:

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

tienes que quitar sessionid del usuario establecido cuando caduca la sesión. Por lo tanto, puede mantener un conjunto ordenado adicional cuya puntuación es una marca de tiempo.

Cuando crea la sesión 10 para el usuario 100:

MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired  10
EXEC

Luego, debe crear un demonio que sondeará el zset para identificar la sesión que expirará (ZRANGEBYSCORE). Para cada sesión expirada, tiene que mantener la estructura de datos:

  • saca la sesión del zset (ZREMRANGEBYRANK)
  • recuperar el ID de usuario de la sesión (HMGET)
  • eliminar sesión (DEL)
  • eliminar la sesión del conjunto de ID de usuario (SREM)

La principal dificultad es asegurarse de que no haya condiciones de carrera cuando el daemon sondea y procesa los elementos. Vea mi respuesta a esta pregunta para ver cómo se puede implementar:

¿Cómo manejar la caducidad de la sesión basada en redis?

En versiones más recientes de Redis (2.8.0 y posteriores), las notificaciones Keyspace para expired Se admiten eventos. es decir, cuando un key con un TTL expira este evento se activa.

Esto es a lo que suscribirse:

'[email protected]__:expired'

Entonces, suscribirse a este evento le permite tener un índice único para todas las sesiones y puede eliminar el key del índice cuando el key caduca

Ejemplo:

Use un conjunto ordenado como índice secundario con el uid como peso:

ZADD "idx-session-uid"  

Busque claves de sesión para un usuario específico con:

ZRANGEBYSCORE "idx-session-uid"  

Cuando una sesión se elimina o caduca, hacemos lo siguiente:

ZREM "idx-session-uid" 

Reseñas y puntuaciones de la guía

Si haces scroll puedes encontrar las observaciones de otros gestores de proyectos, tú además eres capaz insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *