第11章 AOF持久化
除了RDB持久化功能外, Redis还提供了AOF(Append Only File)持久化功能, 通过保存Redis服务器所执行的写命令来记录数据库状态.
11.1 AOF持久化的实现
AOF持久化的实现分为追加, 文件写入, 文件同步三个步骤.
命令追加: AOF持久化打开时, 服务器执行完写命令后, 会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾.
写入与同步: Redis的服务器在处理文件事件时可能会执行写命令, 所以每次结束一个事件循环之前, 都会调用flushApeendOnlyFile函数, 具体同步方案则是根据配置中的appendfsync选项有所不同(默认为everysec).
11.2 AOF文件的载入与数据还原
因为AOF文件里面包含了重建数据库所需的所有写命令, 所以服务器只要读入并重新执行一遍就可以还原数据库.
11.3 AOF重写
为了解决AOF文件体积膨胀(不断增大)的问题, Redis提供了AOF文件重写的功能. 通过该功能, Redis服务器创建一个新的AOF文件, 能够保存相同的数据库状态(数据), 但是不会包含任何浪费空间的冗余命令, 所以新文件体积会更小.
为避免大量写入操作阻塞进程, AOF重写任务交给子进程完成. 另外, 为了避免数据不一致问题, Redis设置了一个AOF重写缓冲区, 当Redis服务器执行完一个写命令后, 会同时将这个写命令发送给AOF缓冲区和重写缓冲区.
当子进程完成AOF重写工作后, 会向父进程发送一个信号, 父进程在接到该信号后, 调用信号处理函数, 将AOF重写缓冲区的所有内容写入到新AOF文件中, 再原子地(atomic)替换现有地AOF文件.
- Title: 第11章 AOF持久化
- Author: Huan Lee
- Created at : 2023-08-25 20:00:27
- Updated at : 2024-02-26 04:53:15
- Link: https://www.mirthfullee.com/2023/08/25/notion-第11章 AOF持久化-a7da7386/
- License: This work is licensed under CC BY-NC-SA 4.0.