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.