我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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)机制,在合适的时机把旧命令合并成一组最小指令,既压缩体积又加快启动速度!

 

posted on 2025-04-21 14:36  我就是奇迹  阅读(44)  评论(0)    收藏  举报