1、问题描述
假如 Redis 里面有 1 亿个 key ,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如何将它们全部找出来?
2、 解决方式
使用Keys指令扫描出指定模式的key列表。
3、问题升级
- 这个Redis正在给线上的业务提供服务,采取2的keys指令会带来什么问题?
- 如何解决这个新的问题?
4、深入分析
- Redis是单线程的,keys指令执行的时候会阻塞线程一段时间,这时候Redis对线上业务的服务就会暂停,直至keys指令执行完毕瑷珲恢复。
- 使用scan指令规避以上问题:scan 指令可以无阻塞的提取出指定模式的 key 列表,但是会有一定的重复概率。
- 解决重复只需要在客户端去重即可。使用scan指令整体的花费大于keys指令,要区分使用场景的不同需求。