Provádění smyčky na položkách a synchronní přístup ke každému prvku není příliš efektivní. S Redis 2.4 existují různé způsoby, jak dělat, co chcete:
- pomocí příkazu sort
- pomocí propojení
- pomocí příkazů s variadickými parametry
S Redis 2.6 můžete také použít skriptování Lua, ale to zde není ve skutečnosti vyžadováno.
Mimochodem, datová struktura, kterou jste popsal, by mohla být vylepšena pomocí hashů. Místo ukládání uživatelských dat do samostatných klíčů je můžete seskupit do hash objektu.
Pomocí příkazu řazení
Můžete použít příkaz Redis sort k načtení dat v rámci jedné zpáteční cesty.
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"
Použití potrubí
Klient Ruby podporuje pipelining (tj. možnost odeslat několik dotazů do Redis a čekat na několik odpovědí).
keys = $redis.smembers("events:1:attendees")
res = $redis.pipelined do
keys.each do |x|
$redis.mget(x+":name",x+":age")
end
end
Výše uvedený kód načte data pouze ve dvou zpátečních cestách.
Použití příkazu variadic parametr
Příkaz MGET lze použít k načtení několika dat najednou:
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"
Cena je zde také dvě zpáteční. To funguje, pokud můžete zaručit, že počet klíčů k načtení je omezený. Pokud ne, potrubí je mnohem lepší řešení.