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

相关推荐
Elastic 中国社区官方博客2 小时前
Elasticsearch:在 X-mas 吃一些更健康的东西
android·大数据·数据库·人工智能·elasticsearch·搜索引擎·全文检索
酷柚易汛2 小时前
酷柚易汛ERP 2025-12-26系统升级日志
java·前端·数据库·php
wang6021252183 小时前
阿里云存储的一些简要概述
数据库·阿里云·fastapi
小徐Chao努力4 小时前
【Langchain4j-Java AI开发】08-向量嵌入与向量数据库
java·数据库·人工智能
TG:@yunlaoda360 云老大4 小时前
华为云国际站代理商GSL主要有什么作用呢?
网络·数据库·华为云
TG:@yunlaoda360 云老大4 小时前
华为云国际站代理商GSL的流量用量与资费合规是如何实现的?
网络·数据库·华为云
冰冰菜的扣jio4 小时前
MySQL三大重要日志详解
数据库·mysql
JoannaJuanCV4 小时前
自动驾驶—CARLA仿真(30)交通管理器(Traffic Manager)
java·redis·自动驾驶
l1t4 小时前
postgresql递归查询指定搜索顺序的方法
数据库·postgresql·dfs·递归·cte