Melakukan loop pada item dan mengakses setiap elemen secara serempak sangat tidak efisien. Dengan Redis 2.4, ada berbagai cara untuk melakukan apa yang Anda inginkan:
- dengan menggunakan perintah sort
- dengan menggunakan pipelining
- dengan menggunakan perintah parameter variadik
Dengan Redis 2.6, Anda juga dapat menggunakan skrip Lua, tetapi ini tidak terlalu diperlukan di sini.
Omong-omong, struktur data yang Anda gambarkan dapat ditingkatkan dengan menggunakan hash. Daripada menyimpan data pengguna dalam kunci terpisah, Anda dapat mengelompokkannya dalam objek hash.
Menggunakan perintah sortir
Anda dapat menggunakan perintah Redis sort untuk mengambil data dalam satu perjalanan pulang pergi.
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"
Menggunakan pipa
Pipelining dukungan klien Ruby (yaitu kemampuan untuk mengirim beberapa kueri ke Redis dan menunggu beberapa balasan).
keys = $redis.smembers("events:1:attendees")
res = $redis.pipelined do
keys.each do |x|
$redis.mget(x+":name",x+":age")
end
end
Kode di atas hanya akan mengambil data dalam dua perjalanan pulang pergi.
Menggunakan perintah parameter variadik
Perintah MGET dapat digunakan untuk mengambil beberapa data sekaligus:
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"
Biaya di sini juga dua kali pulang pergi. Ini berfungsi jika Anda dapat menjamin bahwa jumlah kunci yang akan diambil terbatas. Jika tidak, pipelining adalah solusi yang jauh lebih baik.