redis.call / lua中的动态参数数量

时间:2018-09-23 23:53:56

标签: lua redis

我想从lua脚本中按多个MATCH搜索,但是'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命令

1 个答案:

答案 0 :(得分:3)

("SCAN", 0, 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))