Redis 如何在脚本中扫描lua表结果
我正在编写一个Lua脚本,在redis中执行。我使用的排序集如下所示:Redis 如何在脚本中扫描lua表结果,redis,lua,Redis,Lua,我正在编写一个Lua脚本,在redis中执行。我使用的排序集如下所示: 成员:96954_1_1557705600 分数:1557705600 分数是unix时代的时间戳 我想首先得到两个时间戳之间的结果,然后根据成员中的glob模式过滤这些结果。类似于MATCH*\u1.* 我的脚本如下所示,但在尝试将Lua表传递给zscan时失败: local start\u date=键[1] 本地结束日期=键[2] 本地有限公司日期=redis.call('zrangebyscore','rooms'
成员:96954_1_1557705600
分数:1557705600
分数是unix时代的时间戳
我想首先得到两个时间戳之间的结果,然后根据成员中的glob模式过滤这些结果。类似于MATCH*\u1.*
我的脚本如下所示,但在尝试将Lua表传递给zscan时失败:
local start\u date=键[1]
本地结束日期=键[2]
本地有限公司日期=redis.call('zrangebyscore','rooms',开始日期,结束日期)
返回redis.call('zscan',解包(受日期限制),'match*.'1')
limited\u by\u date
correct包含我期望的值,但是我现在如何使用zscan搜索它们 当您获得limited\u by\u 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
结果相交才能得到最终答案。感谢您的回复。性能是最大的问题<代码>受日期限制的长度可以大于1K。您认为迭代数组或使用zinterstore
方法查找交集会更有效吗?谢谢您的帮助。@calbear47如果集合太大,两种解决方案都不好。迭代数组或ZSCAN
集合可能需要很长时间。相反,您应该为不同的模式将数据保存在不同的集合中。例如,将符合模式*\u 1.*
的项目保存到一个集合,并将符合模式*\u 2.*
的项目保存到另一个集合。然后你只需要调用ZRANGEBYSCORE
就可以得到结果。为什么我没想到呢?!谢谢,谢谢你的帮助。我想这就是我最终要做的。但我很高兴我知道了脚本是如何工作的。