sql >> Databasteknik >  >> NoSQL >> Redis

Finns det ett kommando i Redis för HASH-datastruktur som liknar MGET?

Det finns inget sådant kommando, redis-haschar fungerar inom hashen, så HMGET arbetar inuti en hash och ger alla fält i hashen. Det finns inget sätt att få åtkomst till alla fält i flera hash i ett .

Men du kan använda flera HMGET på varje hash och få alla fält. du kan pipeline dessa kommandon för att köras på en gång.

Alternativ 1 Ex. implementering i pseudokod

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

Alternativ 2 Ett annat alternativ är att skriva ett LUA-skript och anropa det med 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

Ring lua scptipt

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

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


  1. Jag tar emot dubbletter av meddelanden i min klustrade node.js/socket.io/redis pub/sub-applikation

  2. hur dödar jag inaktiva redis-klienter

  3. MongoDB $substrCP

  4. mongoDB :Skapa ett objekt-ID för varje nytt barn som läggs till i matrisfältet