geo*_*sos 5 lua redis redisclient
出于性能考虑,我需要尽量减少到 Redis 的跳数。我从 C++ 代码中多次调用 HMSET,并且正在研究是否可以通过使用 Lua 脚本来更改此设置,并通过一次调用 Redis 来设置多个 Redis 哈希键:
HMSET myhash1 field1 "Hello" field2 "World"
HMSET myhash2 field1 "Hello" field2 "World"
HMSET myhash3 field1 "Hello" field2 "World"
...
HMSET myhashN field1 "Hello" field2 "World"
Run Code Online (Sandbox Code Playgroud)
如何向脚本传递多个哈希键和多个字段/值?
更新 根据 Itamar Haber 评论,我发现我的问题是 KEYS 和 ARGV 值之间缺少空格的逗号 -
我最终得到了以下脚本:
local k = 1
for i=1, #KEYS do
if redis.call('hmset', KEYS[i], ARGV[k], ARGV[k+1], ARGV[k+2], ARGV[k+3]) == 1 then
return 1
end
k = k + 4
end
return 0
redis-cli --eval /var/tmp/script.lua myhash1 myhash2 , field1 "Hello" field2 "World" field1 "Hello" field2 "World"
Run Code Online (Sandbox Code Playgroud)
我不确定是否可以进一步优化它以避免重复字段名称或为每个键传递任意数量的字段/值。