我正在编写一个Lua脚本以在Redis中执行。我正在使用如下所示的排序集:
Member: 96954_1_1557705600Score: 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搜索它们呢?

最佳答案

当您获得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结果相交以获得最终答案。

10-05 18:10