Redis-在千万/亿级别数据中筛选数据-场景分析

本文探讨了在Redis中从1亿个key中查找10万个特定前缀的key的方法。介绍了使用keys指令的问题,并提出使用scan指令来避免服务暂停,虽然会增加一定的重复率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述

假如 Redis 里面有 1 亿个 key ,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如何将它们全部找出来?

2、 解决方式

使用Keys指令扫描出指定模式的key列表。

3、问题升级

  • 这个Redis正在给线上的业务提供服务,采取2的keys指令会带来什么问题?
  • 如何解决这个新的问题?

4、深入分析

  • Redis是单线程的,keys指令执行的时候会阻塞线程一段时间,这时候Redis对线上业务的服务就会暂停,直至keys指令执行完毕瑷珲恢复。
  • 使用scan指令规避以上问题:scan 指令可以无阻塞的提取出指定模式的 key 列表,但是会有一定的重复概率。
  • 解决重复只需要在客户端去重即可。使用scan指令整体的花费大于keys指令,要区分使用场景的不同需求。