news 2026/6/2 10:42:22

Redis 持久化——RDB 快照 vs AOF 日志

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis 持久化——RDB 快照 vs AOF 日志

重启就丢数据?那 Redis 和内存有啥区别。持久化就是给 Redis 上个“保险”。

本次导航

  • RDB:内存快照,定期备份,适合灾难恢复
  • AOF:操作日志,每次写入都记下来,更可靠
  • 混合持久化:RDB + AOF 的合体(Redis 4.0+)
  • 怎么选:数据安全 vs 性能,你站哪边?
  • 图解:RDB 和 AOF 的工作流程对比

发车前提醒:学完前面几种数据结构,该考虑“怎么把数据留住”了。持久化就是干这个的。

一、为啥需要持久化?

Redis 的数据默认存在内存里。一断电、一重启,啥都没了。

持久化就是把内存里的数据保存到硬盘上,下次启动时再读回来。

Redis 提供了两种持久化方案:

  • RDB(Redis Database):在某个时间点把整个内存数据拍一张“快照”,存成.rdb文件。
  • AOF(Append Only File):把每一条写命令都追加到.aof文件里(类似 MySQL 的 binlog)。

它们可以单独用,也可以一起用。下面一个个说。

二、RDB:定时拍照,恢复快

2.1 工作原理

RDB 会在你指定的时间间隔内,把内存里的所有数据fork 一个子进程,由子进程写入磁盘。主进程继续处理请求,不阻塞。

2.2 怎么配置

redis.conf里:

save 900 1 # 900 秒内至少有 1 个 key 变化,就触发 bgsave save 300 10 # 300 秒内至少有 10 个 key 变化 save 60 10000 # 60 秒内至少有 10000 个 key 变化

也可以手动触发:SAVE(阻塞主进程,不建议)或BGSAVE(后台 fork 子进程,推荐)。

2.3 优点 vs 缺点

优点缺点
文件紧凑,恢复速度快(直接加载)可能丢数据:最后一次快照之后的写操作全没
适合备份、灾备(可以拷贝到其他地方)数据集大时 fork 子进程会短暂卡顿
恢复比 AOF 快很多不能实时持久化

三、AOF:记操作日志,更可靠

3.1 工作原理

每一条写命令SETHSETLPUSH等),Redis 都会追加到appendonly.aof文件末尾。重启时,Redis 会逐条执行 AOF 里的命令来恢复数据。

3.2 同步策略(关键!)

appendfsync配置决定什么时候把缓冲区刷到磁盘:

策略说明数据安全性性能
always每次写命令都立即 fsync最安全,最多丢一条命令最慢
everysec每秒 fsync 一次最多丢 1 秒内的数据折中,推荐
no交给操作系统决定可能丢很多(OS 崩溃时)最快

配置示例

appendonly yes appendfsync everysec

3.3 AOF 重写(避免文件无限膨胀)

AOF 会记录每一条命令,可能很快变大。比如你INCR counter一百次,AOF 会记 100 条命令。重写机制会把它压缩成一条SET counter 100

自动触发:auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb

也可以手动:BGREWRITEAOF

3.4 优点 vs 缺点

优点缺点
数据更安全(最多丢 1 秒)文件比 RDB 大
写操作实时记录,可读性好(可以 cat 看命令)恢复速度比 RDB 慢(要逐条执行)
适合做主从复制的备库频繁 fsync 会影响性能

四、混合持久化(Redis 4.0+)—— 最佳实践

4.1 它是啥?

RDB 恢复快但丢数据多,AOF 安全但恢复慢。混合持久化把两者结合:

  • AOF 文件开头是 RDB 格式的数据(内存快照)
  • 后面追加 AOF 格式的增量命令

4.2 怎么开启

aof-use-rdb-preamble yes # Redis 4.0 开始支持,默认开启

4.3 效果

重启恢复时,先加载 RDB 部分(极快),再重放 AOF 部分的增量命令。既快又安全。

五、怎么选?

场景推荐方案理由
缓存服务,丢数据影响不大仅 RDB,甚至不持久化性能优先,重启后从 DB 回填
重要数据,不能丢AOF + everysec最多丢 1 秒数据
既要性能又要相对安全混合持久化(默认配置)RDB 快速恢复 + AOF 增量
主从复制架构都开,但 slave 可不开 AOF从库承担持久化压力
单纯做消息队列(Streams)AOF + everysec消息不能丢

个人建议:生产环境都开。主节点开 AOF(everysec)+ RDB,从节点可以只开 RDB。

六、常用运维命令

命令作用
BGSAVE后台生成 RDB 快照
BGREWRITEAOF手动重写 AOF 文件(压缩)
LASTSAVE查看最后一次成功生成 RDB 的时间戳
INFO persistence查看持久化状态(rdb_last_save_time、aof_size 等)
CONFIG GET appendonly查看 AOF 是否开启

欢迎点赞、关注、转发

有任何疑问,留言区见!🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 10:41:08

当 AI 遇到真正的编程痛点,Codex 攻克 5 类核心难题总结

大家好,我是小悟。 一、背景与问题描述 Codex 是 OpenAI 基于 GPT-3 架构开发的代码生成模型,专门用于将自然语言指令转化为可执行的代码。尽管它在代码补全、函数生成等任务上表现出色,但仍然面临一系列典型的编码难题。接下来详细探讨 Code…

作者头像 李华
网站建设 2026/6/2 10:34:42

从零开始:5个步骤掌握EhViewer开源漫画浏览器的核心功能

从零开始:5个步骤掌握EhViewer开源漫画浏览器的核心功能 【免费下载链接】EhViewer 🥥 A fork of EhViewer, feature requests are not accepted. Forked from https://gitlab.com/NekoInverter/EhViewer 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/6/2 10:33:32

对公贷款和个人贷款有什么区别

结合业务、流程、规则、风险、系统测试视角,分维度对比对公贷款(企贷)和个人贷款(个贷),同时标注测试重点差异,方便落地使用。 一、核心整体区别 表格 对比维度对公贷款(企业 / 单…

作者头像 李华