AOF 详细的持久化过程如下:
- Redis 接收到的写操作命令并不是直接追加到磁盘的 AOF 文件的,而是将每一条写命令
按照 redis 通讯协议格式暂时添加到 AOF 缓冲区 aof_buf。 - 根据设置的数据同步策略,当同步条件满足时,再将缓冲区中的数据一次性写入磁盘的
AOF 文件,以减少磁盘 IO 次数,提高性能。 - 当磁盘的 AOF 文件大小达到了 rewrite 条件时,redis-server 主进程会 fork 出一个子进程
bgrewriteaof,由该子进程完成 rewrite 过程。 - 子进程 bgrewriteaof 首先对该磁盘 AOF 文件进行 rewrite 计算,将计算结果写入到一个
临时文件,全部写入完毕后,再 rename 该临时文件为磁盘文件的原名称,覆盖原文件。 - 如果在 rewrite 过程中又有写操作命令追加,那么这些数据会暂时写入 aof_rewrite_buf
缓冲区。等将全部 rewrite 计算结果写入临时文件后,会先将 aof_rewrite_buf 缓冲区中
的数据写入临时文件,然后再 rename 为磁盘文件的原名称,覆盖原文件