appendonly 与文件形态
appendonly 是 AOF 的总开关:设为 yes 后实例才记录追加日志,设为 no 时即使目录里存在 AOF 文件也不会加载或写入。文件形态随版本变化:7.0 之前 AOF 是一个 appendonly.aof 单文件,7.0 起改为目录结构,由 manifest 描述一个 base 基线文件加若干 incr 增量文件,这样重写时不必整体替换一个大文件,也便于按段管理。
基本信息
| 开关 | appendonly yes|no,可通过 CONFIG SET 动态切换 |
|---|---|
| 旧版形态 | 单文件 appendonly.aof,位于 dir 指定的目录 |
| 新版形态 | 7.0 起为 appendonlydir/ 目录,含 manifest 与 base、incr 文件 |
| 动态开启 | 立即触发一次基线重写,把当前内存数据写成基线,之后写入进入增量 |
| 关闭影响 | 关闭不会删除已有文件,遗留文件可能影响后续的加载判断 |
典型使用场景
- 为存量实例补开持久化:CONFIG SET appendonly yes 即时生效,无需重启
- 版本升级前后核对文件结构:升级到 7.0 后目录结构变化,备份脚本必须同步调整
- 备份策略设计:新版可直接备份整个 appendonlydir 目录,恢复时目录一起还原
- 容量治理:观察 base 与 incr 文件的体积分布,判断重写是否按预期触发
- 临时关闭 AOF 做压测:压测结束立即重新开启并确认基线已生成
开启与查看
开启与查看
redis-cli CONFIG SET appendonly yes # 动态开启,后台立刻生成基线
redis-cli CONFIG GET appendonly # 确认开关状态
ls -lh /data/redis/ # 旧版:看到 appendonly.aof
ls -lh /data/redis/appendonlydir/ # 新版:manifest 与 base/incr 文件
redis-cli INFO persistence | grep -E 'aof_enabled|aof_current_size|aof_base_size'
redis-cli CONFIG REWRITE # 让开关写入配置文件,重启后仍生效文件形态对照
| 版本 | 结构 | 运维影响 |
|---|---|---|
| 7.0 之前 | 单个 appendonly.aof | 备份与恢复只需处理一个文件,重写时整体替换 |
| 7.0 及之后 | appendonlydir 目录加 manifest | 备份需连同目录一起处理,注意 manifest 与其他文件的一致性 |
| 混合格式 | aof-use-rdb-preamble yes 时基线为 RDB 格式 | 加载更快、体积更小,但基线部分不再是人可读的命令 |
| 关闭后 | 文件保留但不再写入 | 重新开启时会重新生成基线,旧文件仍占磁盘 |
动态开启的开销:CONFIG SET appendonly yes 会立即触发一次子进程重写来生成新基线,这个动作和快照一样需要 fork 并可能造成短暂停顿。大实例应在低峰执行,并提前确认磁盘空间足够容纳新基线文件。
关闭 appendonly 不会清理已有文件:目录里的 AOF 还在,重新开启时 Redis 会重新生成基线,但旧文件与 manifest 的残留可能引起加载来源与预期不一致。关闭前应明确是否需要归档或删除这些文件。