sql >> Database >  >> NoSQL >> Redis

Is er een opdracht in Redis voor HASH-gegevensstructuur vergelijkbaar met MGET?

Er is geen commando zoals dat, redis hashes werken binnen de hash, dus HMGET werkt binnen één hash en geeft alle velden in die hash. Er is geen manier om toegang te krijgen tot alle velden in meerdere hashes tegelijk .

U kunt echter meerdere HMGET's op elke hash gebruiken en alle velden ophalen. je kunt deze commando's in één keer pijplijnen om ze uit te voeren.

Optie 1 Ex. implementatie in pseudo-code

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

Optie 2 Een andere optie is om een ​​LUA-script te schrijven en dat aan te roepen met EVAL

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

Bel de lua stipt

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

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


  1. Is het mogelijk om een ​​Linux VFS-cache te hebben met een FUSE-bestandssysteem?

  2. Django ValueError:Geen route gevonden voor pad 'ws/chat//'

  3. Uitzondering:kan niet converteren van BSON-type EOO naar Datum

  4. Een Redis-verbinding maken met Master en Slave