Redis
 sql >> Database >  >> NoSQL >> Redis

Come fare GROUP BY in Redis

Puoi farlo

in uno script lua denominato 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 ottiene l'hash dalla sequenza key0,val0,key1,val1, ecc...

e dopo puoi chiamarlo così:

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

avrai:

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

maggiori informazioni per la funzione di valutazione qui

modifica : come detto deltheil in comment , per controllare solo i valori e non fare controlli inutili puoi fare un passo del ciclo for di 2 perché il rendering di una richiesta hash è chiave, valori, chiave, valore, ecc ...:

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