Redis启动时是否会自动执行AOF重写去除重复命令?
问题结论
你给出的配置不会让Redis实例启动时自动移除AOF文件中的重复命令。
原因说明
你配置的auto-aof-rewrite-percentage和auto-aof-rewrite-min-size两个参数,仅在Redis正常对外服务的运行阶段生效:
实例运行时会定期检查AOF文件的当前大小与上次重写后的大小差值,当增长比例达到100%且文件大小超过64MB时,才会自动触发后台AOF重写,合并重复命令、精简AOF文件。
而Redis启动阶段的默认逻辑是直接读取AOF文件中的所有命令逐条执行恢复内存数据,不会自动触发重写操作,重复命令会被全部加载执行。
实现启动时不加载重复命令的方法
- 手动操作方案(适合非频繁重启场景)
重启Redis实例前,先执行redis-cli BGREWRITEAOF命令,等待后台AOF重写完成后再执行重启操作。重写后的AOF文件已经合并了所有重复命令,启动时不会加载冗余命令。 - 自动化脚本方案(适合频繁重启、自动化运维场景)
自行编写Redis启动脚本,在正式启动实例前增加如下处理逻辑:- 先备份原有AOF文件避免数据丢失
- 临时启动一个不监听对外端口、仅加载本地AOF文件的Redis进程,可参考命令
redis-server --port 0 --appendonly yes --appendfilename /你的AOF文件路径/appendonly.aof - 向临时进程发送
BGREWRITEAOF指令,等待重写完成后关闭临时进程 - 用重写后的新AOF文件替换原有文件,再正式启动Redis实例
注意:不要使用
redis-check-aof --fix处理重复命令,该工具仅用于修复损坏、格式错误的AOF文件,不会执行重写精简操作。
内容的提问来源于stack exchange,提问作者Lorah Attkins
相关产品推荐
相关产品推荐

