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

xax*_*axa 2 redis

我有一个拥有几百万个密钥的redis数据库.有时我需要通过模式查询键,例如2016-04-28:*我使用的模式scan.第一次打电话应该是

scan 0 match 2016-04-28:*
Run Code Online (Sandbox Code Playgroud)

然后,如果搜索完成,它将返回一串键和下一个光标或0.

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

Redis博士说

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

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

有没有办法让我加快速度?

Ita*_*ber 9

你总是需要完成扫描(即获取光标== 0),以确保没有匹配.但是,您可以使用该COUNT选项来减少迭代次数.默认值10是快的如果这是一个常见的场景,你的匹配模式 - 开始增加它(例如双倍或2的幂,但只是为了以防万一)和每个空的回复,以使Redis"更难搜索"键.通过这样做,你将节省网络往返,所以它应该"加快速度".