Redis: ¿es posible caducar un elemento en una matriz o en un conjunto ordenado?

124

¿Actualmente solo es posible caducar un par clave / valor completo? ¿Qué sucede si quiero agregar valores a una estructura de tipo Lista y hacer que se eliminen automáticamente 1 hora después de la inserción? ¿Es eso posible actualmente, o sería necesario ejecutar un trabajo cron para realizar la purga manualmente?

randombits
fuente

Respuestas:

76

¿Actualmente solo es posible caducar un par clave / valor completo?

Hasta donde yo sé, y también de acuerdo con los comandos clave y el documento sobre el vencimiento , actualmente puede establecer el vencimiento solo para una clave específica y no para su estructura de datos subyacente. Sin embargo, hay una discusión en los grupos de Google sobre esta funcionalidad con soluciones alternativas descritas.

yojimbo87
fuente
1
¿Alguna idea a partir de julio de 2016 que hayan admitido esto en una versión más nueva?
Kamran Shahid
1
@KamranShahid tiene algo sobre esto ??
Prakash Kumar
1
Nop Prakash todavía no.
Kamran Shahid
3
¿Sigue siendo relevante esta respuesta después de 8 años?
simo
2
Sí, Redis no admite la caducidad de elementos en estructuras de datos anidadas.
Itamar Haber
94

Existe un patrón común que resuelve este problema bastante bien.

Utilice conjuntos ordenados y utilice una marca de tiempo como puntuación. Entonces, es trivial eliminar elementos por rango de puntaje, lo que podría hacerse periódicamente, o solo en cada escritura, y las lecturas siempre ignoran los elementos fuera del rango, leyendo solo un rango de puntajes.

Más aquí: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

Adriaan Pelzer
fuente
7
Buena solución, pero desearía que Redis lo admita correctamente. Es un requisito común y no debería requerir soluciones complejas.
UpTheCreek
14
No sé, estoy muy feliz de que se mantengan firmes: expandir el conjunto de funciones de formas que no quieren o no planean significa sacrificar el diseño. La creación de funciones adicionales en la parte superior suena como la solución perfecta y deja que Redis haga lo que hace, de manera excelente
Kieren Johnstone
redis es perfecto tal como es: diseño simple, limpio y comportamiento predecible que da como resultado un rendimiento más que excelente
let4be
1
Maravillosa solución, también pudimos usar una simple lista de quince en la que mantuvimos una lista y simplemente tomamos los primeros 5 elementos, y cuando la lista creció más de 5 + N dependiendo de la escalabilidad, eliminamos la clave y comenzamos de nuevo. Simple, fácil y exactamente como deberían ser los algoritmos de Redis. Este algoritmo le da a nuestro sistema de informes suficiente tiempo para consultar la lista y ver con qué dispositivos inician sesión los usuarios. De acuerdo con @KierenJohnstone, Redis está diseñado para crear arquitectura a su alrededor y es perfecto tal como es.
Ligemer
1

Encontré un método diferente para manejar esto, no sé si es útil para alguno de ustedes, pero aquí va:

El hash y el conjunto ordenado están vinculados por una guía.

  1. Tengo un hash que expirará en 'x' segundos
  2. Tengo un conjunto ordenado que se usa para consultas a distancia
  3. Los datos de ambos se agregan en una transacción, por lo que si uno falla, ambos fallan.
  4. En una consulta de rango, use 'EXISTS' para ver si el valor hash existe a medida que se repiten los resultados
  5. Si no existe, ha caducado, así que elimine el elemento del conjunto ordenado
JEPrice
fuente