出于性能方面的考虑,我需要将到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"
我该如何向脚本传递多个哈希键和多个字段/值?
更新 根据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"
我不确定是否可以进一步优化以避免重复字段名称或为每个键传递任意数量的字段/值。