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

时间:2016-04-08 12:27:09

标签: lua redis

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

此脚本的逻辑形式为:

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.我想了解这些参数如何传递给调用方法。

1 个答案:

答案 0 :(得分:2)

您需要将其余参数复制到另一个表,并使用unpack将该参数传递给该函数。一个片段胜过千言万语:

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