我正在编写一个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
结果相交以获得最终答案。