sql >> Base de Datos >  >> NoSQL >> Redis

Obtener múltiples valores clave de Redis

Hacer un bucle en los elementos y acceder de forma sincrónica a cada elemento no es muy eficiente. Con Redis 2.4, hay varias formas de hacer lo que quieras:

  • usando el comando ordenar
  • mediante canalización
  • usando comandos de parámetros variables

Con Redis 2.6, también puede usar secuencias de comandos de Lua, pero esto no es realmente necesario aquí.

Por cierto, la estructura de datos que describiste podría mejorarse usando hashes. En lugar de almacenar datos de usuario en claves separadas, puede agruparlos en un objeto hash.

Uso del comando ordenar

Puede usar el comando de clasificación de Redis para recuperar los datos en un viaje de ida y vuelta.

redis> set users:1:name "daniel"
OK
redis> set users:1:age 24
OK
redis> set users:2:name "user2"
OK
redis> set users:2:age 24
OK
redis> sadd events:1:attendees users:1 users:2
(integer) 2
redis> sort events:1:attendees by nosort get *:name get *:age
1) "user2"
2) "24"
3) "daniel"
4) "24"

Uso de canalización

La canalización de soporte del cliente de Ruby (es decir, la capacidad de enviar varias consultas a Redis y esperar varias respuestas).

keys = $redis.smembers("events:1:attendees")
res = $redis.pipelined do
   keys.each do |x|
      $redis.mget(x+":name",x+":age")
   end
end

El código anterior recuperará los datos en dos viajes de ida y vuelta solamente.

Uso del comando de parámetro variable

El comando MGET se puede utilizar para recuperar varios datos de una sola vez:

redis> smembers events:1:attendees
1) "users:2"
2) "users:1"
redis> mget users:1:name users:1:age users:2:name users:2:age
1) "daniel"
2) "24"
3) "user2"
4) "24"

El costo aquí también es de dos viajes de ida y vuelta. Esto funciona si puede garantizar que la cantidad de claves para recuperar es limitada. Si no, canalizar es una solución mucho mejor.