📚 分类
redis
🕵🏽‍♀️ 问题描述
redis作为缓存,如何实现持久化(AOF)?
👨‍🏫 问题讲解
❒ 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
🏳️‍🌈 问题总结
✅AOF和RDB各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

持久化方式:记录每一次执行的命令
数据完整性:相对完整,重取决于刷盘策略
文件大小:记录命令,文件体积很大
宕机恢复速度: 慢
数据恢复优先级:高,因为数据完整性更高
系统资源占用:低,主要是磁盘I0资源但AOF重写时会占用大量CPU和内存资源
使用场景:对数据安全性要求较高常见

redis 启动时,若同时开启 RDB 和 AOF,优先加载 AOF 文件(因 AOF 数据更完整)
📖 问题信息
📈 浏览次数:45 | 📅 更新时间:2025-12-03 16:16:37
📦 创建信息
🏷️ ID:7 | 📅 创建时间:2024-10-05 10:34:48