我试图找到一个解决方案,如何从HASH具有相同值的a中获取所有字段。
例如
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"
Run Code Online (Sandbox Code Playgroud)
所以我想要的是做类似的事情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
Run Code Online (Sandbox Code Playgroud)
lua 按序列 key0,val0,key1,val1 等获取哈希值...
在你可以这样称呼它之后:
redis-cli eval "$(cat script.lua)" 1 "my_hash" 1
Run Code Online (Sandbox Code Playgroud)
你将会有 :
1) "foo"
2) "1"
3) "bar"
4) "1"
Run Code Online (Sandbox Code Playgroud)
有关 eval 函数的更多信息,请点击此处
编辑:正如 deltheil 在评论中所说,为了只检查值而不进行不必要的检查,您可以将 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |