2012-05-22 11 views
43

He sencilla clave de la lista Redis => "supplier_id"Redis Obtener todas valor de lista sin iteración y sin estallar

Ahora todo lo que quieren es recuperar todo el valor de la lista sin tener que recorrer en iteración o reventar el valor de la lista

Ejemplo para recuperar todo el valor de una lista Ahora he iterar sobre la longitud Redis

element = [] 
0.upto(redis.llen("supplier_id")-1) do |index| 
    element << redis.lindex("supplier_id",index) 
end 

se puede hacer esto sin la iteración perhap con el modelado mejores Redis. ¿Alguien puede sugerir

+0

¿Puede describir lo que quiere hacer con la lista redis? tal vez deberías usar un tipo de llave diferente. – eyossi

+0

@eyossi La idea es crear una etiqueta de selección con opciones valor sido el proveedor_id presentó bases de datos ya que la recuperación de registros en bases de datos relacionales fue costosa y pensamos en descargar todo el provider_id en redis cuando se crean y eliminarlos cuando se destruyen de la base de datos – Viren

Respuesta

101

Para recuperar todos los elementos de una lista con Redis, no necesita iterar y buscar cada uno de los elementos. Sería realmente ineficiente.

Simplemente tiene que usar el comando LRANGE para recuperar todos los elementos en una sola toma.

elements = redis.lrange("supplier_id", 0, -1) 

devolverá todos los elementos de la lista sin alterar la lista.

+2

¿Hay alguna manera de hacerlo de una manera eficiente de la memoria? – nilskp

+1

Si con la eficiencia de la memoria te refieres a la iteración incremental de los elementos, puede implementarse utilizando el relleno y el bucle en llamadas de rango, pero aumentará el número de viajes de ida y vuelta, y perderás consistencia. –

+0

Cada vez que intento esto obtengo el error "argumento (s) inválido (s)" – Ricardo

2

No estoy un poco claro sobre su pregunta, pero si el supplier_id es numérico, ¿por qué no utilizar un ZSET?

Añadir sus valores, así:

ZADD suppliers 1 "data for supplier 1" 
ZADD suppliers 2 "data for supplier 2" 
ZADD suppliers 3 "data for supplier 3" 

A continuación, puede eliminar todo hasta (pero no incluyendo proveedores tres), así:

ZREMRANGEBYSCORE suppliers -inf 2 

o

ZREMRANGEBYSCORE suppliers -inf (3 

Eso también le brinda acceso muy rápido (por id. de proveedor) si solo quiere leer de él.

Espero que ayude!

+0

¿puede proporcionar la documentación para asegurarse de que ciertamente puede ayudar – Viren

Cuestiones relacionadas