//…
};
举个栗子
set msg 123
当执行完上述这个命令时,就会将这条命令变成协议形式,然后追加到aof_buf缓冲区的末尾(此时还没有写入AOF文件中)
AOF文件的写入与同步
Redis的服务器进程就是一个事件循环(loop),这个循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件则负责执行像serverCron函数这样需要定时运行的函数。
服务器每次结束一个事件循环的之前,会调用flushAppendOnlyFile函数,考虑是否需要将aof_buf缓冲区中的内容写入和保存到AOF文件里面,这个过程伪代码表示如下
def eventLoop(); //事件循环,即整个Redis进程
while True:
//处理文件事件,接收用户命令和处理命令后返回结果给用户
//再处理的时候,aof_buf缓冲池可能会添加新内容
processFileEvents();
//处理时间事件
processTimeEvents();
//考虑是否将aof_buf缓冲中的内容写入和保存到AOF文件里面
flushAppendOnlyFile();
End While
End eventLoop;
flushAppendOnlyFile函数的行为由服务器配置的appendfsync选项(fsync代表同步)的值来决定,各个不同值产生的行为如下面所示
下面是配置文件里面的信息