Redis持久化机制中的 AOF机制简单介绍

目录

[一、AOF 核心原理(一句话总结)](#一、AOF 核心原理(一句话总结))

[二、AOF 的核心流程](#二、AOF 的核心流程)

[1. 开启 AOF(默认关闭)](#1. 开启 AOF(默认关闭))

[2. 命令追加](#2. 命令追加)

[3. 同步策略(核心配置,平衡安全与性能)](#3. 同步策略(核心配置,平衡安全与性能))

[4. AOF 重写(解决文件膨胀问题)](#4. AOF 重写(解决文件膨胀问题))

[5. 数据恢复](#5. 数据恢复)

[三、AOF vs RDB](#三、AOF vs RDB)

[四、进阶:混合持久化(Redis 4.0+ 推荐)](#四、进阶:混合持久化(Redis 4.0+ 推荐))

总结


AOF(Append-Only File)是 Redis 第二种核心持久化机制,和 RDB 的 "快照式备份" 不同,它靠记录写命令日志实现数据持久化

一、AOF 核心原理(一句话总结)

Redis 执行所有写命令 (如 SET、DEL、HSET 等)时,会把命令以可读的文本格式追加到 AOF 文件末尾;Redis 重启时,重新执行 AOF 文件里的所有命令,就能还原内存数据。

就像你写作业时,把每一步解题步骤记在笔记本上,就算作业本丢了,照着步骤重新写一遍,就能还原最终答案。

二、AOF 的核心流程

1. 开启 AOF(默认关闭)

需在 redis.conf 中配置:

复制代码
appendonly yes  # 开启 AOF(默认 no)
appendfilename "appendonly.aof"  # AOF 文件名,默认存在 Redis 安装目录
2. 命令追加

Redis 执行写命令后,先把命令写入内存缓冲区 (避免频繁刷盘),再按 "同步策略" 刷到磁盘的 AOF 文件。比如执行 SET user:balance 100,AOF 文件里会新增一行:

复制代码
*3
$3
SET
$12
user:balance
$3
100

(注:这是 Redis 的 "RESP 协议格式",可读性虽不如纯文本,但 Redis 能识别,也可通过 redis-cli --pipe 解析)

3. 同步策略(核心配置,平衡安全与性能)

AOF 关键是 "何时把缓冲区的命令刷到磁盘",通过 appendfsync 配置,有 3 种选择:

配置值 含义 数据安全性 性能影响 适用场景
always 每次写命令都立即刷盘 最高 (几乎不丢) 最差 (频繁 I/O) 金融交易、对账等核心场景
everysec 每秒刷盘 1 次(默认) 较高 (最多丢 1 秒) 平衡 (推荐) 电商、社交等常规场景
no 仅把命令交给操作系统,由系统决定何时刷盘(通常 30 秒) 最低 (可能丢大量) 最好 非核心数据、纯缓存场景

配置示例:

复制代码
appendfsync everysec  # 推荐的默认配置
4. AOF 重写(解决文件膨胀问题)
  • 为什么要重写 :AOF 不断追加命令,文件会越来越大(比如反复修改 user:balance,AOF 会存所有修改命令),既占磁盘,重启恢复也慢。
  • 重写原理 :Redis fork 子进程,遍历当前内存数据,生成 "能还原数据的最简命令集",替换旧的 AOF 文件。比如内存中 user:balance 最终值是 120,不管之前改了多少次,重写后 AOF 里只剩 SET user:balance 120
  • 触发方式
    • 手动:执行 BGREWRITEAOF(后台执行,不阻塞主线程);

    • 自动:配置阈值(满足以下 2 个条件触发):

      复制代码
      auto-aof-rewrite-min-size 64mb  # AOF 文件至少 64MB 才触发
      auto-aof-rewrite-percentage 100 # 当前文件比上次重写后大 100%(翻倍)触发
5. 数据恢复

appendonly.aof 放到 Redis 配置的 dir 目录下,启动 Redis,Redis 会自动读取 AOF 文件,按顺序执行所有命令,恢复数据。

三、AOF vs RDB

维度 AOF RDB
存储格式 文本命令日志(可读) 二进制快照(不可读)
数据安全性 高(everysec 最多丢 1 秒) 低(快照间隔内丢数据)
文件体积 大(冗余命令多,重写后变小) 小(紧凑二进制)
恢复速度 慢(逐行执行命令) 快(直接加载快照)
性能影响 刷盘频繁时略高 fork 子进程时短暂阻塞

四、进阶:混合持久化(Redis 4.0+ 推荐)

开启 aof-use-rdb-preamble yes 后,AOF 文件开头是 RDB 格式的全量快照,后面是增量 AOF 命令:

  • 恢复时:先快速加载 RDB 快照(恢复全量数据),再执行增量 AOF 命令(补充最新数据);
  • 优势:兼顾 RDB 恢复快、AOF 数据全的优点,是生产环境最优选择。

总结

AOF 核心是 "记命令日志",通过同步策略控制数据安全性,通过重写解决文件膨胀,适合对数据丢失容忍度低的场景;生产环境通常建议开启 AOF + 混合持久化,搭配 RDB 做定期备份,既保证数据安全,又兼顾恢复效率。

相关推荐
阿维的博客日记几秒前
Redis的旁路缓存策略和先删除缓存后更新数据库,先更新数据库后删除缓存,这三种策略之间有什么关系??
数据库·redis·缓存
ictI CABL17 分钟前
redis连接服务
数据库·redis·bootstrap
苍煜24 分钟前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
xmjd msup1 小时前
mysql的分区表
数据库·mysql
Lyyaoo.1 小时前
【JAVA Spring面经】Spring 事务失效情况
java·数据库·spring
MeAT ITEM1 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens1 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.11 小时前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
Rick19931 小时前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花8 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化