Redis.call / Lua 中的动态参数数量

我想通过 Lua 脚本多个匹配条件进行搜索,但是 MATCH 的数量取决于脚本的需求 - 我需要搜索符合任意顺序中的所有单词(在这种情况下为 "aa","bb")的键,并且单词的数量可能更多(或更少) 如果它是固定的,就像这样工作:

local result = redis.call("SCAN", 0, "MATCH", "*aa*", "MATCH", "*bb*")

我如何使它变得动态,可以根据需要添加多个 MATCH? 类似于以下内容:

local match={}
for i=1, #ARGV do
  table.insert(match, "MATCH")
  table.insert(match, "*"..ARGV[i].."*")
end
local result = redis.call("SCAN", 0, match)

...... 我曾经尝试把它转换为字符串,但出现了错误。

local match="SCAN 0 MATCH *aa* MATCH *bb*"
local result = redis.call(match)

从 Lua 脚本中调用未知的 Redis 命令

点赞
用户5525442
用户5525442

在此行代码中,("SCAN", 0, match)中的match被传递为一张表,你需要对其进行解包。

类似以下代码:

local match={}
match[1] = "SCAN"
match[2] = 0

for i=2, #ARGV do
   match[#match+1] = "MATCH"
   match[#match+1] = "*"..ARGV[i].."*"
end

redis.call(unpack(match))
2018-09-24 01:55:51