如何在lua脚本中zscan lua表结果

我正在编写一个Lua脚本在redis中执行。我正在处理类似于这样的有序集:

Member: 96954_1_1557705600 Score: 1557705600

得分是unix纪元时间戳。

我想首先获取在两个时间戳之间的结果,然后基于成员中的glob模式过滤这些结果。类似于 MATCH *_1_*

我的脚本看起来像这样,但是当我尝试将Lua表传递给zscan时,它失败了:

local start_date = KEYS[1] local end_date = KEYS[2] local limited_by_date = redis.call('zrangebyscore','rooms', start_date, end_date) return redis.call('zscan', unpack(limited_by_date), 'match *_1_*')

limited_by_date 包含我期望的值,但现在我怎么用zscan搜索它们呢?

点赞
用户5384363
用户5384363

当您获得了limited_by_date时,您可以自己迭代数组,并输出符合模式的项。

local result = {}
for i, mem in ipairs(limited_by_date) do
    if string.match(mem, ".+_1_.+") then result[#result + 1] = mem end
end

return result

不需要使用ZSCAN命令。如果使用ZSCAN,您必须对ZSCAN结果和ZRANGEBYSCORE结果进行交集运算才能获得最终的答案。

2018-11-24 14:05:21