最近发现一个问题,redis在高流量写入的情况下,偶发性出现客户端延迟升高,经过排查发现redis AOF重写 fork 子进程导致。为什么要进行AOF重写,以及如何避免AOF重写呢?本文做个介绍。
1. 什么是AOF
AOF是redis防止数据丢失的日志备份策略,总共有三种方式

Always 同步写回:每个写命令执行完同步地将日志写回磁盘;可靠性高,数据基本不会丢失,但同时每次命令都需要写到磁盘,性能影响比较大。除非对于数据丢失非常敏感,否则不会选择这种策略。
Everysec 每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;首先异步写到缓冲区,redis会使用单独的线程每秒写回到磁盘,如果这期间出现宕机,可能会丢失1s左右的数据,但是性能得到了保证。相当于是性能和数据丢失之间做了一个折衷,这个也是默认策略。
No 操作系统控制的写回:每个写命令执行完