验证的redis版本:6.0.15、Windos为5版本
也许是在线上环境,进行集群redis的操作,需要进行删除key,但是以为一下防火墙问题,在出现重启redis的情况下,我发现使用删除key的命令不生效,于是去网上搜索,大部分帖子会说使用flushdb和flushall,并且列出他们的区别,flushdb不会永久删除,flushall会永久删除,这个结论是错误的。
redis是基于内存的中间件,但是也有自己的持久化操作,其持久化分为RDB(快照保存)和REF(基于文件追加的即时保存),默认的RDB(快照保存)的配置如下:

#redis.conf配置文件

#900秒内 若有一个1key发生变化就进行保存 可多设几个形成互补
save 900 1
#300秒内,若有1个Key发生变化,就进行rdb保存
save 300 10
  1. 单库删除flushdb 清除当前数据库的数据(redis默认下标为0-15个数据库,默认为0,flushdb会删除当前为0的数据库),【不会立即删除rdb文件,直到触发上述的save条件,如果未触发条件,那么重启后会恢复数据】。(rdb的保存时间为900才会执行一次save)
  2. 多库删除flushall会删除所有数据库,并执行持久化,立刻更新rdb快照文件

所以,实际上并不是flushdb命令可以恢复,而是因为未达到触发存储rdb文件的条件,如果使用del key命令也是一样的,如果未达到rdb的保存条件,立即重启也是可以恢复redis数据的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐