Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Como fazer GROUP BY no Redis


Você consegue fazer isso

em um script lua chamado 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 obter hash pela sequência key0,val0,key1,val1, etc...

e depois que você pode chamá-lo assim:
redis-cli  eval "$(cat script.lua)" 1 "my_hash" 1

voce terá :
1) "foo"
2) "1"
3) "bar"
4) "1"

mais informações para a função eval aqui

editar: como disse deltheil no comentário, para verificar apenas os valores e não fazer verificações desnecessárias, você pode passar o loop for em 2 porque a renderização de uma solicitação de hash é 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