redis持久化之AOF持久化

时间:2019-10-09
本文章向大家介绍redis持久化之AOF持久化,主要包括redis持久化之AOF持久化使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

AOF与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,aof持久化是通过保存redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的。

1.AOF持久化的实现

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

1.1 命令追加

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

struct redisServer{
//...
//AOF缓冲区
sds aof_buf
//...
};

例如 redis>SET KEY VALUE

那么服务器在执行这个set命令之后,会将以下协议内容追加到aof_buf缓冲区的末尾:

*3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n

1.2 AOF文件的写入与同步

redis服务器进程就是一个事件循环(loop),这个循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件则负责执行像serverCron函数这样需要定时运行的函数。

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

aof_buf缓冲区的内容写入和保存到AOF文件里面。

def eventLoop():
while true:
//处理文件事件,接收命令请求以及发送命令回复
//处理命令请求时可能会有新内容被追加到aof_buf缓冲区
processFileEvents()
//处理时间事件
processTimeEvents()
//考虑是否将aof_buf中的内容写入和保存到AOF文件里面
flushAppendOnlyFile()

flushAppendOnlyFile函数的行为由服务器配置的appendfsync选项的值来决定,各个不同值产生的行为如下表所示:

appendfsync默认值是everysec,可以参考redis.conf配置文件

 

原文地址:https://www.cnblogs.com/juin1058/p/11640705.html