expire commands redis set tagging ttl

commands - redis expire hash key



TTL para un miembro del conjunto (2)

No es posible caducar directamente elementos en lista, conjuntos o zsets.

Debe implementar un mecanismo para que se le notifique cuando expire el elemento maestro, de modo que pueda mantener los conjuntos correspondientes en consecuencia.

Consulte la respuesta a esta pregunta, creo que se aplica a su caso de uso (reemplace la sesión por identificación y usuario por etiqueta):

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

¿Es posible en Redis establecer TTL (tiempo de vida) no para una clave específica, sino para un miembro para un conjunto?

Estoy utilizando una estructura para las etiquetas propuestas por la documentación de Redis: los datos son simples pares clave-valor, y las etiquetas son conjuntos que contienen claves correspondientes a cada etiqueta, por ejemplo

> SETEX id:id_1 100 ''Lorem ipsum'' OK > SADD tag:tag_1 id:id_1 (integer) 1

La id:id_1 clave id:id_1 caducará como se esperaba, pero no veo una forma eficiente de eliminar el miembro correspondiente de la tag:tag_1 establecido.

Una manera en que surgió es usar un trabajo cron que contenga una secuencia de comandos que elimine periódicamente las claves expiradas de los conjuntos: agregue todos los nombres de etiquetas a otro conjunto y luego itere a través de todas las etiquetas, luego todos los identificadores correspondientes a cada etiqueta y verifique la clave correspondiente existe - si no, llamando a SREM .

No creo que sea una manera eficiente y posiblemente me gustaría mantener las etiquetas lo más limpias posible, porque el tamaño de los conjuntos probablemente afectará el rendimiento de búsqueda por varias etiquetas ( SINTER ). ¿Hay una forma más "interna"?


No, esto no es posible (y tampoco está planeado ). El enfoque recomendado es utilizar un conjunto ordenado con una puntuación establecida en la marca de tiempo y luego eliminar manualmente las claves caducadas. Para consultar claves caducadas, puede usar ZRANGEBYSCORE $now +inf , para eliminar claves caducadas, ZREMRANGEBYSCORE -inf $now hará el truco.

En mi aplicación, simplemente emite ambos comandos cada vez que consulto el conjunto. También combino esto con el tiempo de expiración (largo) en el propio conjunto para eventualmente purgar los conjuntos no utilizados.

Este artículo lo explica con más detalle.