Redis 持久化详解:RDB、AOF 与混合模式

在绝大多数生产环境中,Redis 都不仅仅是缓存,很多业务会把 Redis 当作"准数据库"使用,这时候数据的持久化能力就变得非常重要。

Redis 提供了两种主要的持久化方式:RDB(快照)和 AOF(追加日志),以及 Redis 4.0 之后推出的混合持久化模式。本文将详细介绍它们的原理、优缺点、使用场景,并通过表格进行直观对比。

为什么需要持久化?(一句话总结)

内存是易失的,一旦 Redis 进程崩溃/服务器断电/重启,内存数据全部丢失。

持久化就是把内存数据以某种形式保存到硬盘,在下次启动时能够快速恢复。

RDB 持久化(快照方式)

原理:

RDB 是"点对点快照",Redis 会根据配置定期(或手动)将内存中的全部数据 dump 到磁盘上,生成一个压缩的二进制文件 dump.rdb。

触发方式(三种)

save 命令(同步阻塞,基本不用)

bgsave 命令(异步,后台 fork 子进程,生产环境常用)

自动触发(配置文件 save 策略,例如 save 900 1)

默认触发条件

bash 复制代码
save 900 1     # 900秒内至少1个key变化
save 300 10    # 300秒内至少10个key变化
save 60 10000  # 60秒内至少10000个key变化

RDB优点

  • 文件体积小(高度压缩)
  • 恢复速度极快(直接加载二进制)
  • 对 Redis 主进程性能影响最小(只 fork 子进程)
  • 适合做冷备份、数据迁移

RDB缺点

  • 可能丢失最近几次快照之间的数据(最坏情况丢失几分钟)
  • 数据量大时 fork 会短暂阻塞(Copy-on-Write 机制下通常可接受)

AOF 持久化(日志方式)

原理

把每一条写命令都追加记录到文件中(默认 appendonly.aof),重启时通过重放这些命令来重建内存数据。

三种 fsync 策略(最关键的配置):

  • always:每条写命令都立刻 fsync → 几乎不丢数据,但性能最差
  • everysec :每秒 fsync 一次(默认)→ 最多丢失 1
    秒数据,性能与安全性折中
  • no:交给操作系统决定何时 fsync → 性能最好,但最容易丢数据

AOF 重写(AOF 文件越来越大时的解决方案)

当 AOF 文件过大时,Redis 会 fork 子进程对当前内存数据生成最精简的命令集合,生成新的 AOF 文件(bgrewriteaof)。

AOF 持久化优点:

  • 数据安全性最高(everysec 策略下最多丢1秒)
  • 日志可读,可手动修复
  • 断电恢复更可靠

AOF 持久化缺点:

  • 文件体积大(文本格式)
  • 重启恢复慢(需回放所有命令)
  • 高并发写时性能压力较大

混合持久化(Redis 4.0+ 推荐方式)

原理:在 AOF 重写时,不再只生成纯命令,而是:

  • 先把当前内存数据以 RDB 格式写入新的 AOF 文件头部
  • 之后把重写开始后的增量写命令以 RESP 协议格式追加在后面

启动恢复流程(重启)

先快速加载 RDB 部分 → 再回放少量的增量 AOF 命令

→ 集合了 RDB 快速恢复 + AOF 较高数据安全性的优点

配置示例(Redis 7.0+ 默认开启):

bash 复制代码
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes   # 开启混合模式
save 60 1000               # 同时开启 RDB

优点:

  • 恢复速度快(RDB 秒级加载)
  • 数据丢失最多1秒(AOF 保障)
  • 兼顾了 RDB 的备份便利性和 AOF 的安全性

RDB vs AOF vs 混合模式 详细对比表

对比维度 RDB(快照) AOF(日志) 混合模式(RDB + AOF) 推荐场景
数据安全性 低(可能丢几分钟) 高(everysec 最多丢1秒) 高(最多丢1秒) ---
恢复速度 极快(直接加载二进制) 较慢(需回放所有命令) 极快(RDB + 少量增量) 大数据量场景
文件体积 最小(高度压缩) 较大(文本日志) 中等(RDB + 少量AOF) 备份传输要求高
写入性能影响 很小(仅 fork) 中等至大(取决于 fsync) 中等 高并发写
备份便利性 极佳(单文件,易传输) 一般(文件大,需重写) 极佳(可用 RDB 做备份) 异地容灾、迁移
抗断电能力 一般 优秀 优秀 金融、订单系统
生产推荐度 仅缓存场景 不单独使用 ★★★★★(Redis 官方强烈推荐) 99% 生产环境

生产环境推荐配置

bash 复制代码
# 必须开启
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes     # 混合模式

# 建议保留 RDB 做快照备份
save 900 1
save 300 10
save 60 10000

# 自动重写阈值(防止 AOF 文件无限增长)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
相关推荐
zzb15801 天前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿1 天前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2741 天前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo1 天前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
雷工笔记1 天前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying1 天前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组1 天前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法1 天前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t1 天前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
Pocker_Spades_A1 天前
基于代价模型的连接条件下推:复杂SQL查询的性能优化实践
数据库·sql·性能优化