什么是Redis持久化?Redis为什么要持久化?
我们都知道Redis的数据都是存储在内存的,持久化就是通过将内存中的数据通过AOF或者RDB或者AOF-RDB混合的方法写入磁盘中,完成持久化。
那我们为什么要进行持久化?如果我们不对redis进行持久化,当我们电脑关闭或者redis服务关闭,数据就丢失了,如果这种情况在我们的生产中出现,是很致命的。
因此我们需要对redis数据进行持久化。下面我们就来讲讲redis持久双雄之一的RDB。
什么是RDB?
RDB(Redis DataBase):RDB持久化以指定的时间间隔执行数据集的时间点快照
简单的理解就是实现类似照片记录效果的方式,就是将某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保障。
这个快照文件就称为RDB文件(dump.rdb)。
作用:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里。
Redis的数据都在内存中,保存备份时,他执行的是全量快照,也就是说把内存中的所有数据都记录到磁盘中,一锅端,RDB保存的是dump.rdb文件
接下来我简单介绍下它的配置文件怎么修改,以及触发条件。
配置文件和RDB触发条件
Redis6.0及以下的配置情况:
Redis6.2及Redis7.0的配置情况:
以下我们只讲讲Redis7.0:
RDB触发分为自动触发和主动触发
自动触发
这里我们将自动触发的条件设置为,5秒内有2次数据修改,我们就保存到rdb文件内。
这个配置是设置rdb文件保存路径的。
这个配置则是设置我们生成的rdb文件的文件名。
手动触发
save:在主进程中执行会阻塞当前redis服务器,知道持久化工作完成执行save命令期间,Redis不能处理其他命令,线上禁止使用:
BGSAVE:Redis会在后台异步进行快照操作,不阻塞快照同时可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。
Redis会使用bgsave对当前内存中的所有数据做快照,这个操作是子进程在后台完成的,这就允许主进程可以同时修改。
什么是fork?
在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,尽量避免膨胀。