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

相关推荐
墨香幽梦客17 小时前
数据库选型对比:MySQL、Oracle与PostgreSQL的企业应用场景分析
数据库·mysql·oracle
wei_shuo17 小时前
多模一体破局:金仓数据库引领文档数据库国产化新征程
数据库·金仓数据库
Coder_Boy_17 小时前
基于SpringAI的在线考试系统-数据库 表结构 & 完整外键依赖关系梳理
java·数据库·人工智能·软件工程
清风拂山岗 明月照大江17 小时前
MySQL进阶
数据库·sql·mysql
努力进修17 小时前
金仓数据库:多模融合内核驱动,重构国产化文档数据库新生态
数据库·重构
Miss_Chenzr17 小时前
Springboot企业人事管理系统mi130(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring boot
大猫会长17 小时前
postgresql内的RLS规则
数据库·postgresql
YIN_尹17 小时前
【MySQL】表的约束(上)
android·数据库·mysql
云和数据.ChenGuang18 小时前
运维故障之MySQL 连接授权错误
运维·数据库·人工智能·mysql
枫叶梨花18 小时前
Greenplum数据库身份证查验函数
数据库