由于性能,我需要最小化到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数组提供字段和值。

10-08 12:58