redis scan返回空结果但非零光标

时间:2016-04-28 15:00:22

标签: redis

我有一个拥有几百万个密钥的redis数据库。有时我需要通过模式查询密钥,例如我使用2016-04-28:*的{​​{1}}。首先应该是

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

但是,如果我运行查询并且没有匹配的键,scan 0 match 2016-04-28:* 仍会返回非零游标但是一组空键。这种情况一直发生在每个连续的查询中,因此搜索似乎不会持续很长时间。

Redis文档说

  

SCAN系列函数不保证每次调用返回的元素数量在给定范围内。 命令也允许返回零元素,只要返回的光标不为零,客户端就不应该认为迭代完成。

所以当我拿出一套空钥匙时,我就不能停下来。

有没有办法可以加快速度?

1 个答案:

答案 0 :(得分:7)

您总是需要完成扫描(即获取光标== 0)以确保没有匹配。但是,您可以使用COUNT option来减少迭代次数。默认值10很快如果这是您的匹配模式的常见情况 - 开始增加它(例如双倍或2的幂,但是为了防万一),每个空的回复,以使Redis"搜索较硬"钥匙。通过这样做,您将节省网络往返次数,因此它应该“加快速度”。