你可以这样做
在名为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"
如在评论中的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