Redis服务器的AOF持久化
与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。
技术点:AOF文件持久化功能的写入、保存、载入等操作;减少AOF文件体积的AOF重写功能。
AOF持久化
AOF持久化功能的实现可分为命令追加(append)、文件写入、文件同步(sync)三步骤。
1、命令追加
当AOF持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾:
struct redisServer{
//...
//AOF缓冲区
sds aof_buf;
//...
};
2、AOF文件的写入与同步
3、AOF文件的载入与数据还原
- AOF载入
因为AOF文件里面包含了重建数据库状态所需的所有写命令,所以服务器只要读入并重新执行一遍AOF文件里面保存的写命令,就可以还原服务器关闭之前的数据库状态。 - AOF重写
因为AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以随着服务器运行时间的流逝,AOF文件的内容会越来越多,文件体积会越来越大,AOF的重写功能就是用来解决这个问题的。Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态相同,但新的AOF文件不会包含任何浪费空间的冗余命令,所以新的AOF体积小很多。
(1)AOF文件重写的实现
AOF文件重写不需要对现有AOF文件进行任何读写、分析或写入操作,这个功能是通过读取服务器当前的数据库状态来实现的。
AOF重写在一个子进程中进行,为了解决数据不一致问题,Redis服务器设置了一个AOF重写缓冲区,这个缓冲区在服务器创建子进程之后开始使用。AOF缓冲区和AOF重写缓冲区。

浙公网安备 33010602011771号