cmushroom/redis-pro

key多的时候,列表加载特别慢

Closed this issue · 2 comments

ydq commented

我们测试环境 37w+的key,列表加载大概需要四五十秒,线上环境上亿的key,几乎没法使用,难道是把所有的key都scan,直至cursor为0才停止?

直接上图吧,加载我们线上环境的数据,等了很久最后内存溢出:
iShot2022-02-07 10 07 23

测试环境37w+的key,和 medis2 做比较,medis2 列表几乎是秒出,只获取到满足翻页数量的数据后就停止scan,除非手动点击下一页(然后在用最后一次的 cursor 去继续加载更多,非严格意义上的准确翻页),而且使用它自己的日志记录可以看得出来,类型是在滚动到视图以内之后再并行使用type命令延迟加载的,最后如果直接点击到具体的key之后 再分别使用 get 和 ttl 去获取内容以及过期时间,但是redis-pro 不知道是怎么处理的,每次列表和翻页,测试环境几乎需要 四五十秒才能出结果

redis-pro-slow

感谢反馈, 这应该是个bug, 目前的做法是, 如果是*,空格等全匹配时,只查出第一页, 数量使用dbsize 。 scan 的时候每页数量不是固定的, 可能会出偏差, 所以在分页时使用了递归查询。 我造一些数据试一下。

找到问题了, 用swift concurrency 重构的时候, 有个参数传错了