当前位置:首页 > 问答 > 正文

redis缓存怎么一键清理啊,命令行操作其实挺简单的,教你快速搞定

主要基于Redis官方文档中对KEYS、FLUSHALL、FLUSHDB等命令的说明,以及常见的运维实践经验。

第一招:最狠的,清空整个Redis——FLUSHALL命令

这个命令是啥意思呢?简单粗暴,就是不管你Redis服务器里面有多少个数据库(Redis默认有16个库,编号0-15),FLUSHALL 一声令下,所有库里的所有数据,全部清空,寸草不生,这相当于给你的Redis来了个格式化。

什么时候用这个? 一般是测试环境,或者你真的非常确定整个Redis的数据都可以不要了,想从头开始时再用,生产环境(也就是正在线上运行的系统)绝对要慎用,除非是遇到了极端情况,比如被攻击后产生了大量垃圾数据,或者做全量数据迁移前的准备。

具体怎么操作? 连接上你的Redis服务器,然后直接输入命令就行:

FLUSHALL

执行后,Redis会返回一个 OK,这就表示所有数据都已经被清除了,这个命令是同步执行的,也就是说,Redis会等到所有数据都删除完毕后才返回OK,如果你的Redis里数据量特别大(比如几十个GB),那么这个命令可能会让Redis“卡住”一小会儿,期间无法响应其他请求。

进阶用法:FLUSHALL ASYNC 为了解决上面说的“卡住”问题,新版本的Redis还提供了一个异步版的命令:

FLUSHALL ASYNC

这个命令的意思是,Redis会开一个后台线程去慢慢删除所有数据,而它自己会立刻返回OK,然后就可以继续处理其他请求了,这对于数据量大的生产环境来说更友好,避免了对服务造成长时间阻塞,如果条件允许,优先用这个异步版本。

第二招:温和点的,只清空当前数据库——FLUSHDB命令

我们并不想动整个Redis服务器,可能只是其中一个数据库的数据有问题或者没用了,想清理一下,这时候就用 FLUSHDB 命令,它只清空你当前连接的那个数据库。

怎么切换和查看当前是哪个数据库? 当你用redis-cli连接上Redis时,默认是在0号库,你可以用 SELECT 命令来切换数据库,SELECT 1 就切换到1号库,用 INFO keyspace 命令可以查看各个数据库的大致情况。

redis缓存怎么一键清理啊,命令行操作其实挺简单的,教你快速搞定

具体怎么操作? 确保你当前就在想清空的那个库里,然后输入:

FLUSHDB

同样,它也会返回 OK,表示当前这个库的数据都没了,和 FLUSHALL 一样,它也有同步和异步两种模式:

FLUSHDB          # 同步清空当前库
FLUSHDB ASYNC    # 异步清空当前库

选择逻辑和上面一样,数据量大怕阻塞就用 ASYNC

第三招:精准打击,按关键字删除——DEL命令配合KEYS

前面两种都是“核弹”,有时候我们只想删除特定的一批数据,比如所有以某个前缀开头的key,这时候就需要组合拳了。

步骤是这样的:

redis缓存怎么一键清理啊,命令行操作其实挺简单的,教你快速搞定

  1. 先用KEYS命令查找KEYS 命令可以按照通配符模式找出所有匹配的key,你想删除所有以 user_session: 开头的key(这通常用来存用户会话),可以这样:

    KEYS user_session:*

    执行这个命令后,Redis会把所有匹配的key列表显示出来。这里有个重要警告KEYS 命令在生产环境要小心使用!如果你的Redis里key的数量非常庞大,这个命令会遍历所有key,可能导致Redis服务短暂卡顿,影响正常业务,所以最好在业务低峰期操作,或者有替代方案(比如用SCAN命令,但那个更复杂一点)。

  2. 再用DEL命令删除:拿到key的列表后,就可以用 DEL 命令来删除了,你可以一个一个删,但更高效的是直接把上一步找到的所有key一次性传给 DEL,在redis-cli里可以这样操作(这里用到了命令替换,是shell的功能):

    redis-cli KEYS "user_session:*" | xargs redis-cli DEL

    这条命令的意思是:先执行 KEYS "user_session:*" 得到所有key,然后通过管道 传给 xargs 命令,xargs 会把这些key作为参数,拼接到 redis-cli DEL 后面,最终形成一条像 DEL key1 key2 key3 ... 这样的命令来执行,效率很高。

    如果你就是在redis-cli界面里,不想退出,也可以使用Redis的 EVAL 命令执行Lua脚本来实现,但那个对新手来说有点复杂,上面那种管道方式是最常见的。

重要提醒和安全建议

  1. 备份!备份!备份!:在执行任何清理操作,尤其是 FLUSHALLFLUSHDB 之前,如果数据有任何一丁点可能还需要,请务必先备份数据,可以使用 BGSAVE 命令在后台生成一个RDB快照文件。
  2. 生产环境权限控制:正规的公司里,生产环境的Redis通常不会让你有权限执行 FLUSHALL 这种高危命令,或者会设置密码认证,不要轻易尝试。
  3. 理解后果:清楚你每个命令的操作范围,到底是清空所有库,还是当前库,还是部分key,别删错了后悔莫及。
  4. 考虑影响:清理缓存可能会瞬间给后端数据库(比如MySQL)带来巨大压力,因为所有查询都会直接打到数据库上,最好在业务量最低的时候(比如凌晨)操作,并确保数据库能扛住。

一键清理Redis缓存,最常用的就是 FLUSHALL(清全部)、FLUSHDB(清当前库)和 DEL 配合 KEYS(精准删除)这三板斧,根据你的实际需求,选择最合适的命令,并时刻记住安全第一的原则,就能快速搞定问题了。