¿Cuál es la mejor práctica para la lista y el manejo conjunto de Redis?

StackOverflow https://stackoverflow.com/questions/4040574

  •  27-09-2019
  •  | 
  •  

Pregunta

Estamos utilizando Redis como un servidor de almacenamiento en caché y, a menudo tenemos que lidiar con la lista de almacenamiento en caché. Cuando almacenamos en caché los objetos simples que hacemos un GET y Redis volveremos null si no existe el objeto y vamos a saber que el objeto no se almacena en caché y tienen que ser cargados desde la base de datos.

Pero, ¿cómo manejar mejor el mismo para las listas - una lista vacía puede ser un valor válido. ¿Necesitamos a la llamada existe para comprobar si existe la lista (pero haciendo la operación 2 llamadas en lugar de uno) o puede alguien tener una mejor idea de cómo manejar esta situación?

Gracias /

¿Fue útil?

Solución

Si es absolutamente necesario hacer eso, cuando se crea la lista puede empujar un "centinela" como primer elemento que nunca se quita. Con el fin de hacer esto de forma atómica puede utilizar MULTI / EXEC / reloj, pero el reloj está disponible sólo en Redis 2.2 que es actualmente una vista previa (aunque bastante estable, se puede agarrar de rama principal github).

Creo que en su caso de uso puede que también quiera RPUSHX y LPUSHX, que atómicamente empujará contra una lista sólo si ya existe.

Nota que desde Redis 2,2 a existir medios para tener al menos 1 elemento de una lista, como listas que llegarán a cero elementos se eliminan de forma automática, por muchas razones buenas;)

Otros consejos

Por desgracia, no parece Lista / set comandos de recuperación tales como LRANGE y SMEMBERS distinguir entre una lista vacía / set y una lista inexistente / juego.

Así que si es absolutamente necesario para distinguir entre los dos casos, supongo que tendrá que hacer una primera EXISTE. Trate canalizando sus comandos para un mejor rendimiento. La mayoría de las bibliotecas de cliente Redis apoyan la canalización.

O usted podría reconsiderar su estrategia de almacenamiento en caché de manera que no es necesario para distinguirlos.

Si está utilizando php, me gustaría asignar el valor devuelto a una variable y luego verificar si se trata de una matriz. (Esto es cómo funciona usando la biblioteca Predis)

$res = $redis->get('Key');
if(is_array($res))
    do code here
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top