我有一个具有数百万个密钥的redis数据库。有时候,我需要通过模式如查询键2016-04-28:*为我用scan。初次致电应该是
2016-04-28:*
scan
scan 0 match 2016-04-28:*
然后,它将返回一堆键和下一个光标;如果搜索完成,则返回0。
但是,如果我运行查询并且没有匹配的键,则scan仍然返回非零游标,但是键集为空。这种情况一直发生在每个后续查询中,因此搜索似乎不会在很长时间内结束。
Redis文档说
SCAN系列功能不保证每次调用返回的元素数在给定范围内。 还允许命令返回零个元素,并且只要返回的游标不为零,客户端就不应认为迭代已完成。
因此,当我得到空键集时,我不能只是停下来。
有什么办法可以加快速度吗?
您将始终需要完成扫描(即获取光标== 0),以确保没有匹配项。但是,您可以使用该COUNT选项来减少迭代次数。默认值10是fast如果这是您的匹配模式的常见情况- 每次空答复时都开始增加它(例如,double或2的幂,但以防万一,请设置一个最大上限),以使Redis难以“搜索”键。这样,您将节省网络往返,因此它应该“加快速度”。
COUNT