我试图找到一种解决方案,如何从HASH具有相同值的中获取所有字段。
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"。预期结果将是foo和bar。如果有人可以指出我如何使用本机命令或使用该命令,那Lua将非常棒。
HGETALL my_hash "WHERE VALUE = 1"
foo
bar
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