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重写缓冲区。
posted @ 2021-08-29 22:06  一只小菜菜鸟  阅读(46)  评论(0)    收藏  举报