Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 如何在脚本中扫描lua表结果_Redis_Lua - Fatal编程技术网

Redis 如何在脚本中扫描lua表结果

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'

我正在编写一个Lua脚本,在redis中执行。我使用的排序集如下所示:

成员: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
就可以得到结果。为什么我没想到呢?!谢谢,谢谢你的帮助。我想这就是我最终要做的。但我很高兴我知道了脚本是如何工作的。