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

Redis里所有Key一键清空,快速搞定不留痕迹的方法分享

开始)

今天咱们就来聊聊怎么把Redis里的数据一下子全清空,清得干干净净,就像从来没存过东西一样,这个方法特别适合你在自己电脑上测试的时候,或者是不小心把没用的数据弄进了测试环境的Redis里,想要快速重置一下的场景,当然啦,我得先大声提醒一句:在执行清空操作之前,一千一万个确定你连接的是正确的Redis服务器!千万别在生产环境,也就是正在对外提供服务的正式服务器上瞎试,不然数据丢了可就找不回来了,那绝对是灾难性的后果。

好了,警告的话说三遍都不为多,现在咱们进入正题,清空Redis的所有Key,主要靠两个命令,一个是FLUSHALL,另一个是FLUSHDB,别看它俩名字长得像,作用范围可不一样。

Redis里所有Key一键清空,快速搞定不留痕迹的方法分享

先说说这个FLUSHALL命令,这个命令是威力最大的,也是最彻底的,它的作用,就像它的名字一样,“Flush All”,清除所有,不管你的Redis服务器里面创建了多少个数据库,FLUSHALL命令一下去,所有数据库里的所有Key,都会在瞬间被清空,Redis默认会创建16个数据库,编号从0到15,我们平时连接的时候,默认一般是使用0号数据库,如果你在不同的数据库里都存了数据,又想一次性全部清理干净,那就非FLUSHALL莫属了。

那怎么用呢?超级简单,你打开你的Redis命令行客户端(比如用redis-cli这个工具连接上你的Redis服务),然后直接输入命令FLUSHALL,再敲一下回车就行了,如果操作成功了,Redis会返回一个OK给你,告诉你:“搞定啦,全都清空了。” 这个过程非常快,对于数据量大的情况,它也能比较迅速地完成,因为它不需要一个个去遍历删除,底层有更高效的机制。

这里有个但是,如果你的Redis版本是4.0或者更高,并且开启了一种叫做“异步清空”的模式,那你可能会看到它返回的是background flushing started之类的提示,这是什么意思呢?这其实是Redis的一个优化,想象一下,如果你的Redis里存了几个G甚至几十个G的数据,执行清空命令如果一下子全在主线里做完,可能会让Redis“卡”住一会儿,这段时间就无法响应其他的命令了,为了避免这种“卡顿”,Redis提供了异步选项,你可以在命令后面加上ASYNC这个参数,也就是输入FLUSHALL ASYNC,这样,Redis会启动一个后台线程去慢慢清理那些数据,而主线程可以马上继续处理新的请求,服务就不会中断,不过对于咱们自己测试用的小数据量,用不用ASYNC感觉不出啥区别,直接FLUSHALL就行。

Redis里所有Key一键清空,快速搞定不留痕迹的方法分享

说完了横扫千军的FLUSHALL,再来看看它的兄弟FLUSHDB,这个命令就温和一些了,它的作用是“Flush Database”,只清空当前所在的这个数据库,比如你现在连接的是5号数据库,那么执行FLUSHDB之后,只有5号数据库里的Key被清空了,其他的0、1、2、3、4、6...15号数据库都安然无恙,里面的数据原封不动,这个命令在你只想清理某一个特定数据库,而不是全部“一锅端”的时候,就非常有用,它的用法和FLUSHALL一模一样,也是直接输入FLUSHDB或者为了非阻塞加上ASYNC参数变成FLUSHDB ASYNC

问题来了,我到底该用哪一个呢?很简单,就看你的需求,如果你想彻底重置整个Redis服务,不留任何死角,用FLUSHALL,如果你只是想清理当前正在使用的这个数据库,其他的不动,那就用FLUSHDB,选择的时候多花一秒钟确认一下,能避免很多手滑带来的悲剧。

除了通过命令行直接操作,还有一种情况,你可能没有权限直接登录服务器去执行命令,但是你有Redis的连接信息和密码(如果有设置的话),这时候,你可以用一些图形化的工具,比如RedisInsight、Another Redis Desktop Manager之类的,这些工具通常都会在界面上比较显眼的地方提供一个“清空”或者“刷新”的按钮,一点击,它背后其实就是帮你执行了FLUSHALLFLUSHDB命令,用图形化工具的好处是更直观,不容易输错命令,但核心原理还是一樣的。

Redis里所有Key一键清空,快速搞定不留痕迹的方法分享

我必须再啰嗦一下安全问题,这种破坏性的操作,一定要有权限控制,一个好的实践是,在生产环境中,应该通过Redis的配置文件(通常是redis.conf)把这两个危险命令给禁掉,怎么禁呢?就是在配置文件里找到rename-command的配置项,然后把它重命名成一个特别复杂、别人猜不到的字符串,或者直接重命名为空字符串来彻底禁用。

rename-command FLUSHALL “一个超级复杂的密码” rename-command FLUSHDB “”

这样设置之后,即使有人拿到了Redis的访问权限,他输入普通的FLUSHALL命令也会失效,因为Redis已经不认识这个命令了,从而大大提高了数据的安全性,这可是保护数据非常重要的一个步骤。

一键清空Redis的Key,核心命令就是FLUSHALLFLUSHDB,记住它们之间的区别,谨慎选择,并且在执行前百分百确认环境,用好这把“快刀”,它能让你在开发和测试中效率倍增;用不好,它也可能带来大麻烦,希望这个分享能帮到你。 结束)