Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Gibt es in Redis einen Befehl für die HASH-Datenstruktur ähnlich wie MGET?

Es gibt keinen solchen Befehl, Redis-Hashes funktionieren innerhalb des Hashs, also arbeitet HMGET innerhalb eines Hashs und gibt alle Felder in diesem Hash aus. Es gibt keine Möglichkeit, auf alle Felder in mehreren Hashes gleichzeitig zuzugreifen .

Sie können jedoch mehrere HMGET für jeden Hash verwenden und alle Felder abrufen. Sie können diese Befehle per Pipeline ausführen, um sie auf einmal auszuführen.

Möglichkeit 1 Ex. Implementierung in Pseudocode

Pipeline p
List<String> = p.hgetall('key1', fields...); 
List<String> = p.hgetall('key2', fields...);
List<String> = p.hgetall('key3', fields...);
p.exec(); 

Option 2 Eine andere Möglichkeit besteht darin, ein LUA-Skript zu schreiben und dieses mit EVAL

aufzurufen
local array = {}
local keys = redis.call('KEYS', '<your pattern>')

for _,key in ipairs(keys) do
    local val = redis.call('HGETALL', key)
    array[#array + 1] = val
end

return array

Rufen Sie das Lua-Skript auf

redis-cli EVAL "$(cat test.lua)" 0

1) 1) "field1"
   2) "val"
2) 1) "field1"
   2) "val"
   3) "field2"
   4) "val2"