sql >> Base de Datos >  >> NoSQL >> Redis

Cómo hacer GROUP BY en Redis

Puedes hacer esto

en un script lua llamado 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 obtener hash por secuencia key0,val0,key1,val1, etc...

y después puedes llamarlo así:

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

tendrás:

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

más información sobre la función eval aquí

editar: como dijo deltheil en el comentario, para verificar solo los valores y no hacer una verificación innecesaria, puede pasar el ciclo for por 2 porque la representación de una solicitud de hash es clave, valores, clave, valor, 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