如何在Redis中进行“ GROUP BY”

我试图找到一种解决方案,如何从HASH具有相同值的中获取所有字段。

例如

redis > HSET my_hash "foo" 1

(integer) 1

redis > HSET my_hash "bar" 1

(integer) 1

redis > HSET my_hash "baz" 0

(integer) 1

redis > HGETALL my_hash

1) "foo"

2) "1"

3) "bar"

4) "1"

5) "baz"

6) "0"

所以,我要的是做这样的事情HGETALL my_hash "WHERE VALUE =

1"。预期结果将是foobar。如果有人可以指出我如何使用本机命令或使用该命令,那Lua将非常棒。

谢谢。

回答:

你可以这样做

在名为script.lua的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通过序列key0,val0,key1,val1等获取哈希值…

然后您可以这样称呼它:

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

您将拥有 :

1) "foo"

2) "1"

3) "bar"

4) "1"

有关eval函数的更多信息,请参见此处

如在评论中的deltheil所说,仅检查值而不进行不必要的检查,因为哈希请求的呈现为key,values,key,value等,所以您可以按2步执行for循环:

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

以上是 如何在Redis中进行“ GROUP BY” 的全部内容, 来源链接: utcz.com/qa/432516.html

回到顶部