# 介绍

RDB 文件中保存的是数据库状态,AOF 文件中保存的数据执行命令,是数据库过程。

# 持久化的实现

# 命令追加

执行完一个写命令后,会以协议格式将命令追加到服务器状态的 aof_buf 缓冲区的末尾。

# 文件写入与同步

写入缓冲区,然后根据 appendfsync 配置进行同步。
如果是 always,每次都进行同步,如果是 everysec,超过 1s 再同步,如果是 no,不同步,由操作系统同步。

# 文件的载入与数据还原

# AOF 重写

为了解决 AOF 文件体积膨胀的问题,会创建一个新的文件替代现有的文件,两个文件保存的数据库状态相同。

# 实现

将整个过程的命令,简化成初始化现有数据库状态的命令。

# 后台重写

重写会阻塞服务器,使用子进程来进行重写。子进程重写期间,服务器正常处理命令请求。子进程重写完后给父进程发送信号,父进程将这个过程中产生的新命令追加到新文件的末尾,此时不能客户端的请求是不能处理的。