由于性能,我需要最小化到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"
我不确定是否可以进一步优化它,以避免重复每个键的字段名或传递任意数量的字段/值。
最佳答案
为了最大程度地减少跳数,您可以改用流水线-更简单,并具有所需的效果。
脚本还可以使跳数最小化。使用KEYS
数组将哈希键名称传递给脚本,并使用ARGV
数组提供字段和值。