redis(6)——AOF持久化

来源:互联网 发布:五婶软件下载 编辑:程序博客网 时间:2024/06/09 19:43

        与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。

一、AOF持久化的实现

        AOF持久化功能的实现可以分为命令追加(append)、文件写入、文件同步(sync)三个步骤。

1、命令追加   

        当AOF持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾:

2、AOF文件的写入与同步

        因为服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以在服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将aof_buf缓冲区中的内容写人和保存到AOF文件里面。

        flushAppendOnlyFile函数的行为由服务器配置的appendfsync选项的值来决定。

3、AOF文件的载入与数据还原

载入过程


        服务器读人AOF文件,并根据文件内容来还原数据库状态

二、AOF重写

1、AOF文件重写的实现

        首先从数据库中读取键现在的值,然后用一条命令去记录键值对,代替之前记录这个键值对的多条命令,这就是AOF重写功能的实现原理。

2、AOF后台重写

        为了解决这种数据不一致问题,Redis服务器设置了一个AOF重写缓冲区,这个缓冲区在服务器创建子进程之后开始使用,当Redis服务器执行完一个写命令之后,它会同时将这个写命令发送给AOF缓冲区和AOF重写缓冲区。


        当子进程完成AOF重写工作之后,它会向父进程发送一个信号,父进程在接到该信号之后,会调用一个信号处理函数,并执行以下工作:

        1)将AOF重写缓冲区中的所有内容写人到新AOF文件中,这时新AOF文件所保存的数据库状态将和服务器当前的数据库状态一致。

        2)对新的AOF文件进行改名,原子地(atomic )覆盖现有的AOF文件,完成新旧两个AOF文件的替换。

原创粉丝点击