AOF 文件会“越来越大”?
这正是很多人搞 Redis AOF(追加文件)时最容易忽略但很关键的一点!现在我来给你通俗地讲清楚:
✅ 什么叫 AOF 文件会“越来越大”?
📦 AOF(Append Only File)是什么?
-
Redis 每次对数据进行 写操作(比如 SET name Tom、INCR counter),都会 追加写一行日志到 AOF 文件,而不是修改原来的那一行。
📈 举个例子说明“越写越大”:
你有一个 key:
SET score 1
SET score 2
SET score 3
INCR score
虽然你最终 score = 4,
但 AOF 文件里仍然会记录所有历史操作:
SET score 1
SET score 2
SET score 3
INCR score
-
即使这个 key 被覆盖或删除了,之前的操作仍然在 AOF 文件中存在!
-
所以 AOF 文件会随着时间不断变大,并不是数据量变大,而是历史命令积压太多。
✅ 为什么要“重写”AOF?(AOF Rewrite)
AOF 重写的目的就是:
✨ 用最少的命令来重建当前内存中的数据状态,从而压缩掉不必要的历史命令,减小文件体积,提高恢复效率!
🔄 举个简单例子:压缩成一条命令
原 AOF 文件:
SET x 1
SET x 2
SET x 3
INCR x
重写后的 AOF 文件:
SET x 4 ← 直接记录最终值
✅ 更干净
✅ 更小
✅ 启动 Redis 时恢复也更快!
🔧 谁负责重写?什么时候触发重写?
📍 Redis 自动触发:
通过以下两个配置控制:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
意思是:
-
当 AOF 文件比上次重写后的大小增长了 100%(翻倍)
-
且当前文件大于 64MB
-
Redis 自动触发后台重写(bgrewriteaof)
👨💻 手动触发:
redis-cli bgrewriteaof
后台会 fork 子进程进行重写,不阻塞主线程。
✅ 总结一句话:
Redis AOF 是不断“追加写”命令,久而久之会导致文件变大。
所以 Redis 提供了 AOF 重写(AOF Rewrite)机制,在合适的时机把旧命令合并成一组最小指令,既压缩体积又加快启动速度!
浙公网安备 33010602011771号