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 做定期备份,既保证数据安全,又兼顾恢复效率。

相关推荐
笨笨饿1 小时前
#102_Codex无在VSCold无法打开
java·c语言·数据库·笔记
向夏威夷 梦断明暄1 小时前
从架构特点到功能缺陷,重新认识分析型分布式数据库
数据库·分布式·架构
海兰1 小时前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
不知疲倦的仄仄1 小时前
MySQL/Read View快照/MVCC/串行化
java·数据库·mysql
向夏威夷 梦断明暄2 小时前
C# 弃元模式:从语法糖到性能利器的深度解析
服务器·数据库·c#
糖果店的幽灵2 小时前
大模型测评DeepEval快速入门-RAG指标详解
数据库·人工智能·langgraph·大模型测评·deepeval
whn19773 小时前
oracle的节点2无法启动asm实例 提示PMON terminating the instance due to error 481
数据库·oracle·wpf
Devin~Y3 小时前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
AAA@峥4 小时前
Ceph 集群配置管理完整指南
运维·数据库·分布式·ceph