sql >> Databasteknik >  >> NoSQL >> Redis

Få flera nyckelvärden från Redis

Att göra en loop på föremålen och synkronisera varje element är inte särskilt effektivt. Med Redis 2.4 finns det olika sätt att göra vad du vill:

  • genom att använda sorteringskommandot
  • genom att använda pipelining
  • genom att använda variadic parameterkommandon

Med Redis 2.6 kan du också använda Lua-skript, men detta krävs egentligen inte här.

Förresten, datastrukturen du beskrev skulle kunna förbättras genom att använda hash. Istället för att lagra användardata i separata nycklar, kan du gruppera dem i ett hash-objekt.

Använda sorteringskommandot

Du kan använda Redis sorteringskommandot för att hämta data på en tur och retur.

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"

Använda pipelining

Ruby-klienten stödjer pipelining (dvs möjligheten att skicka flera frågor till Redis och vänta på flera svar).

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

Ovanstående kod kommer endast att hämta data i två tur-och-returturer.

Använda variadic parameterkommando

MGET-kommandot kan användas för att hämta flera data på en gång:

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"

Kostnaden här är också två tur och retur. Detta fungerar om du kan garantera att antalet nycklar att hämta är begränsat. Om inte är pipelining en mycket bättre lösning.



  1. Node.js &Redis; Väntar på att en loop ska sluta

  2. Introduktion till Apache HBase Snapshots

  3. mongo - ruby ​​anslutningsproblem

  4. Redis Databas TTL