如何使用 Redis lua 脚本调用具有不同参数的不同命令

How to call different commands with different arguments with Redis lua scripting

我有一个场景,需要在运行 redis 命令之前进行验证。该命令仅应在验证通过时运行。我正在考虑使用 lua 脚本来执行此操作。需要与其参数一起运行的命令应指定为 lua 脚本的参数。

这个脚本的逻辑是这样的:

1
2
3
if verify(KEYS[1], ARGV[1]) then
    redis.call(ARGV[2], KEYS[2], <the rest of arguments for the command ARGV[2])
done

redis.call 方法中所需的参数数量取决于执行的命令 (ARGV[2])。这些参数通过 ARGV[3] 到 ARGV[n] 指定给脚本,其中 n >= 3。我想了解如何将这些参数传递给调用方法。


您需要将剩余的参数复制到另一个表并使用 unpack 将该表传递给函数。一个片段值一千字:

1
2
3
4
5
6
7
8
local i, t = {}
for i=3, #ARGV do
  t[#t+1] = ARGV[i]
end

if verify(KEYS[1], ARGV[1]) then
  redis.call(ARGV[2], KEYS[2], unpack(t))
done