あなたはこれを行うことができます
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などであるため、forループを2ステップすることができます...:
>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