Redis
 sql >> база данни >  >> NoSQL >> Redis

Получаване на множество ключови стойности от Redis

Правенето на цикъл върху елементите и синхронният достъп до всеки елемент не е много ефективно. С Redis 2.4 има различни начини да направите това, което искате:

  • с помощта на командата за сортиране
  • чрез използване на тръбопроводи
  • чрез използване на команди с променливи параметри

С Redis 2.6 можете също да използвате Lua скриптове, но това всъщност не е задължително тук.

Между другото, структурата на данните, която описахте, може да бъде подобрена чрез използване на хешове. Вместо да съхранявате потребителски данни в отделни ключове, можете да ги групирате в хеш обект.

Използване на командата за сортиране

Можете да използвате командата за сортиране на Redis, за да извлечете данните в едно двупосочно пътуване.

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"

Използване на конвейер

Клиентът на Ruby поддържа конвейер (т.е. възможността да се изпращат няколко заявки до Redis и да се чакат няколко отговора).

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

Горният код ще извлече данните само в две двупосочни пътувания.

Използване на команда за променлив параметър

Командата MGET може да се използва за извличане на няколко данни наведнъж:

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"

Цената тук също е две двупосочни пътувания. Това работи, ако можете да гарантирате, че броят на ключовете за извличане е ограничен. Ако не, тръбопровода е много по-добро решение.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Масово поглъщане в Redis

  2. Може ли celery celerybeat да използва планировчик на база данни без Django?

  3. Защо трябва да използвам Redis, когато имам PostgreSQL като моя база данни за Django?

  4. Как да се свържете с клъстер ElastiCache с помощта на node.js

  5. Memcached срещу Redis?