理清Redis缓存那些事儿,怎么快速又彻底地给它清理掉
- 问答
- 2026-01-03 19:14:11
- 20
(引用来源:掘金社区文章“Redis缓存清理攻略”、CSDN博客“Redis数据删除策略详解”、Redis官方文档关于FLUSHDB和FLUSHALL命令的说明)
理清Redis缓存那些事儿,怎么快速又彻底地给它清理掉
咱们今天就来聊聊Redis缓存清理这个话题,你可能遇到过这种情况:网站出了点小问题,或者上线了新功能,这时候可能需要把Redis里的旧数据清一清,让系统重新加载,但怎么清才算“干净”?怎么清才不会影响正在运行的业务?这里面有点讲究。

第一部分:先弄明白Redis缓存是怎么没的(删除策略)
别一上来就想着用大招全删光,先了解下Redis平时是怎么悄咪咪地帮你清理单个键值对的,这能帮你理解为什么有时候数据好像“自己不见了”,也能在需要部分清理时做出更合适的选择。

- 被动删除(等它自己过期):这是最省心的方式,你在往Redis里存数据的时候,可以设置一个过期时间(TTL),一条验证码缓存,你设置它5分钟后失效,那么5分钟一到,当有请求再来访问这个验证码时,Redis就会发现它过期了,然后顺手把它删掉,但这里有个关键点:它是“被动”的,如果这个过期的键一直没人访问,它就会一直占着内存,直到被下面的主动删除策略扫到。
- 主动删除(Redis定期抽查):为了解决那些“赖着不走”的过期键,Redis自己有个后台任务,会定期随机抽查一些设置了过期时间的键,如果发现有过期的,就把它们清理掉,这个策略是被动删除的补充,确保内存能被及时释放。
- 内存淘汰(被迫大扫除):这是最极端的情况,当Redis使用的内存达到了你设定的上限时,再往里写新数据就会触发“内存淘汰机制”,这时候,Redis会根据你预先配置的策略,淘汰掉一些键来腾出空间,策略有很多种,
allkeys-lru:挑最近最少使用的键淘汰(比较常用)。volatile-lru:只从设置了过期时间的键中,挑最近最少使用的淘汰。allkeys-random:随机淘汰所有键。noeviction:不淘汰,直接拒绝新的写入命令(这是默认策略,容易导致服务不可用,生产环境一般会改掉)。
了解了这些,你就知道,平时缓存的消失,大多是按照你设定的规则(过期时间)和Redis自身的机制在运作。
第二部分:手动清理的几种“姿势”(从温柔到暴力)

当我们需要主动、快速地清理缓存时,有以下几种方法,风险各不相同。
- 单个删除(DEL命令):这是最精准的外科手术,你知道某个键的名字,
DEL user_info_12345,就能直接把这条用户缓存删掉,好处是精准,不会误伤,缺点是如果你要清理的键很多,比如按某种前缀批量删,一条条发DEL命令效率太低,会阻塞Redis比较长时间,影响性能。 - 批量删除(通配符方式):为了解决批量删除的问题,Redis提供了通配符(匹配任意多个字符)和(匹配一个字符),你可以用
KEYS命令先找出所有匹配的键,KEYS article_*找出所有文章缓存,然后再用DEL删除。强烈不推荐在生产环境直接用这个办法! 因为KEYS命令会一次性遍历所有键,如果Redis里数据量巨大,这个命令会长时间阻塞Redis服务器,导致所有请求卡住,等于一次小型宕机。 - 安全的批量删除(使用SCAN命令):这是替代
KEYS的安全方法。SCAN命令采用游标方式分批遍历键,每次只取一小部分,不会长时间阻塞Redis,你可以写一个简单的脚本,循环调用SCAN找到匹配的键,然后逐个DEL,虽然速度比一次性的KEYS慢一点,但胜在安全,对服务影响极小,这是生产环境进行模式化批量删除的首选。 - 清空当前数据库(FLUSHDB命令):这个命令非常暴力,它会瞬间清空你当前连接的Redis数据库里的所有数据,比如你的业务数据都存放在Redis的默认0号库,执行
FLUSHDB后,这个库就空了,这个操作很快,但破坏力极强,一定要万分谨慎,最好有权限控制,避免误操作。 - 清空所有数据库(FLUSHALL命令):这是终极核弹,Redis可以配置多个数据库(默认16个),
FLUSHALL会清空Redis服务器上所有数据库里的数据,除非你是真的想重置整个Redis实例,否则绝对不要用。
第三部分:怎么才算“彻底”清理以及注意事项
所谓“彻底”,要看你的目标是什么。
- 如果只是想清空业务数据:在确认无误的情况下,使用
FLUSHDB通常就够了,因为它清空了当前业务使用的整个数据库。 - 如果想重置整个Redis服务:比如准备把Redis实例挪作他用,或者做环境初始化,可以用
FLUSHALL。 - 如果只想清理特定模式的数据:那么用
SCAN加DEL的脚本是最“彻底”且安全的选择。
重要提醒:
- 备份意识:在执行任何大规模删除或清空命令前,如果数据重要,务必先做一次数据备份(RDB或AOF文件备份),有备无患,万一删错了还能恢复。
- 权限控制:在生产环境,应该通过配置严格限制对
FLUSHDB、FLUSHALL、KEYS等高危命令的访问权限,比如只允许管理员IP连接执行。 - 选择时机:清理操作最好放在业务低峰期进行,比如深夜,即使有轻微影响,也能降到最低。
- 确认环境:连上Redis后,执行
INFO命令看看是不是目标环境,千万别把测试环境的清理命令跑到生产服务器上去了,这种事故屡见不鲜。
快速清理用 FLUSHDB/FLUSHALL,但要极度小心;安全地部分清理用 SCAN 加 DEL;而理解Redis自身的删除策略,能帮你更好地设计和维护缓存,减少手动干预的需要。
本文由召安青于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/73875.html
