❒ AOF全称为Append OnlyFile(追加文件),通过记录所有写操作命令来实现数据持久化,即把每次对数据库的修改操作以日志形式追加到磁盘文件中。当 Redis 重启时,会重新执行 AOF 文件中的所有命令,从而恢复数据。
✅AOF的开启与基础配置(redis.conf)
# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
✅AOF命令的写入与同步策略
AOF 命令从内存到磁盘的过程分为 “写入缓冲区” 和 “同步到磁盘” 两步,其中同步策略决定了数据安全性和性能的平衡,Redis 提供 3 种同步策略(通过 appendfsync 配置):
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到A0F文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
✔ always:同步刷盘 → 可靠性高,几乎不丢数据(优点) → 性能影响大(缺点)
✔ everysec:每秒刷盘 → 性能适中(优点) → 最多丢失1秒数据 (缺点)
✔ no:操作系统控制 → 性能最好(优点) → 可靠性较差,可能丢失大量数据(缺点)
✅AOF文件的重写(Rewrite)机制
因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
set num 123
set name jack
set num 666
bgrewirteaot
mset name jack num 666
❒ redis会在触发阈值时自动去重写AOF文件。阈值可以在redis.conf中配置:
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb