2023-02-10

一、redis提供了2个不同形式的持久化方式

1、RDB(Redis DataBase)

2、AOF(Append Of File)

二、RDB的定义

RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘,即Snapshot快照,它恢复时是将快照文件直接读到内存里。

三、备份执行的过程

redis会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。RDB方式要比AOF方式更加的高效。

RDB的缺点最后一次持久化后的数据可能丢失。

四、Fork

1、Fork的作用

它的作用是复制一个与当前进程一样的进程。是作为原进程的子进程。

2、说明

(1)在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后会被exe系统调用,处于效率考虑,Linux中引入了“写时复制技术”。

(2)一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

五、redis中RDB快照触发的时机

1、在redis数据库中执行shutdown会触发RDB快照

2、在redis数据库中执行bgsave会触发RDB快照

3、在redis.conf配置文件中设置例如“save 60 10”会触发RDB快照

六、redis持久化之AOF

1、AOF(Append Only File)的含义

它是以日志的形式记录每个写操作(增量保存),将redis执行过的所有写指令记录下来(读操作不记录),只许9追加文件但不可以改写文件,redis启动之初会读取文件重新构建数据,简而言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2、AOF持久化流程

(1)客户端的请求写命令会被append追加到AOF缓冲区内

(2)AOF缓冲区根据AOF持久化策略将操作sync同步到磁盘的AOF文件中

(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量

(4)Redis服务重启时,会重新load加载AOF文件中的写操作,达到数据恢复的目的

3、说明

当AOF和RDB同时开启时,redis听AOF的。因为RDB最后一次缓存数据可能保存不完整。