0%

redis的AOF简介

AOF全称为Append Only File,是redis的一种刷盘策略。AOF和RDB可以同时存在,但是都是子进程大量写磁盘,非常影响性能,故不推荐。
其主要内容为:

1、将每次更新的命令都写入redisServer对象中的AOF缓存区中。

2、AOF缓存区会按照配置,开启后台线程,用实时同步写入、每隔1s和操作系统安排写入三种模式,将缓存区刷到AOF文件中。

3、上述三种模式中,实时同步写入对于性能损耗较大。每隔1s刷盘较为均衡。操作系统控制刷盘则最不可控。

4、redis在启动的时候,会按照配置去读取AOF文件。按照读取到的命令逐次执行。

但是也存在问题:随着运行时间的增长,命令越来越多,AOF文件也越来越大。故需要进行重写操作:

具体步骤为:

1、开启子进程,遍历每个db,读取k-v结构的所有数据,生成最简单的set or add命令(相当于备份了一次数据)。

2、执行重写后,将每次写的操作都刷入AOF缓存区的同时,再刷入AOF重写区。

3、读取redis各个db的数据完成后,子进程信号量通知父进程。父进程调用处理函数,将AOF重写区的命令追加到新的AOF文件中。最后再原子性的替换旧的AOF文件。