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

问题描述:

我有一个几百万个键的redis数据库。有时我需要通过模式查询关键字,例如2016-04-28:*我为此使用scan。第一个电话应该是redis扫描返回空结果,但非零游标

scan 0 match 2016-04-28:* 

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

但是,如果我运行查询并且没有匹配的键,scan仍然返回非零游标,但是返回一组空的键。这种情况不断发生在每个连续的查询上,所以搜索似乎并没有结束很长时间。

Redis的文档说

SCAN家庭功能不保证每次调用返回的元素的数量是在给定的范围内。 该命令还允许返回零元素,并且只要返回的游标不为零,客户端就不应该考虑迭代完成。

所以我不能停下来,当我得到空套按键。

有没有一种方法可以加快速度?

您将始终需要完成扫描(即获取游标== 0)以确保没有匹配。但是,您可以使用COUNT option来减少迭代次数。 10的默认值是很快的如果这是你的匹配模式的一个常见场景 - 开始增加它(例如,double或者2的幂数,但是为了以防万一),使得Redis“搜索更难”键。通过这样做,您可以节省网络往返时间,以便“加快速度”。