一尘不染

Redis扫描返回空结果,但游标非零

redis

我有一个具有数百万个密钥的redis数据库。有时候,我需要通过模式如查询键2016-04-28:*为我用scan。初次致电应该是

scan 0 match 2016-04-28:*

然后,它将返回一堆键和下一个光标;如果搜索完成,则返回0。

但是,如果我运行查询并且没有匹配的键,则scan仍然返回非零游标,但是键集为空。这种情况一直发生在每个后续查询中,因此搜索似乎不会在很长时间内结束。

Redis文档说

SCAN系列功能不保证每次调用返回的元素数在给定范围内。 还允许命令返回零个元素,并且只要返回的游标不为零,客户端就不应认为迭代已完成。

因此,当我得到空键集时,我不能只是停下来。

有什么办法可以加快速度吗?


阅读 550

收藏
2020-06-20

共1个答案

一尘不染

您将始终需要完成扫描(即获取光标==
0),以确保没有匹配项。但是,您可以使用该COUNT选项来减少迭代次数。默认值10是fast如果这是您的匹配模式的常见情况-
每次空答复时都开始增加它(例如,double或2的幂,但以防万一,请设置一个最大上限),以使Redis难以“搜索”键。这样,您将节省网络往返,因此它应该“加快速度”。

2020-06-20