Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment faire GROUP BY dans Redis

Vous pouvez le faire

dans un script lua nommé script.lua

local hash_val = redis.call('hgetall',KEYS[1])
local result = {}
for i = 0 , #hash_val do
    if hash_val[i] == ARGV[1] then
        table.insert(result,hash_val[i-1])
        table.insert(result,hash_val[i])
    end
end
return result

lua obtient le hachage par séquence key0, val0, key1, val1, etc...

et après vous pouvez l'appeler comme ça :

redis-cli  eval "$(cat script.lua)" 1 "my_hash" 1

vous aurez :

1) "foo"
2) "1"
3) "bar"
4) "1"

plus d'informations sur la fonction eval ici

modifier : comme dit deltheil en commentaire , pour ne vérifier que les valeurs et ne pas faire de vérifications inutiles vous pouvez faire un pas de 2 dans la boucle for car le rendu d'une requête de hachage est key,values,key,value,etc... :

local hash_val = redis.call('hgetall',KEYS[1])
local result = {}
for i = 2 , #hash_val, 2 do
    if hash_val[i] == ARGV[1] then
        table.insert(result,hash_val[i-1])
        table.insert(result,hash_val[i])
    end
end
return result