sql >> Database teknologi >  >> NoSQL >> Redis

Få flere nøgleværdier fra Redis

At lave en løkke på emnerne og synkront få adgang til hvert element er ikke særlig effektivt. Med Redis 2.4 er der forskellige måder at gøre, hvad du vil:

  • ved at bruge sorteringskommandoen
  • ved at bruge pipelining
  • ved at bruge variadiske parameterkommandoer

Med Redis 2.6 kan du også bruge Lua-scripting, men det er egentlig ikke påkrævet her.

I øvrigt kunne den datastruktur, du beskrev, forbedres ved at bruge hashes. I stedet for at gemme brugerdata i separate nøgler, kan du gruppere dem i et hash-objekt.

Brug af sorteringskommandoen

Du kan bruge Redis sorteringskommandoen til at hente dataene på én rundtur.

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"

Brug af pipelining

Ruby-klienten understøtter pipelining (dvs. evnen til at sende flere forespørgsler til Redis og vente på flere svar).

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

Ovenstående kode vil kun hente data i to rundrejser.

Brug af variadisk parameterkommando

MGET-kommandoen kan bruges til at hente flere data i ét skud:

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"

Prisen her er også to returflyvninger. Dette virker, hvis du kan garantere, at antallet af nøgler, der skal hentes, er begrænset. Hvis ikke, er pipelining en meget bedre løsning.



  1. Fjern flere dokumenter fra mongo i en enkelt forespørgsel

  2. Hvordan kan jeg liste alle samlinger i MongoDB-skallen?

  3. Brugerdefinerede funktioner beregnede kolonner mongodb projektion

  4. Hvordan kan jeg omdøbe et felt for alle dokumenter i MongoDB?