news 2026/5/27 0:16:52

Redis持久化详解(一):RDB快照机制深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis持久化详解(一):RDB快照机制深度解析

一、引言

在服务器重启或宕机时,内存中的数据会瞬间消失。Redis作为一款高性能的内存数据库,Redis通过持久化机制保证数据安全不丢失的。

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

  • RDB:定期保存Redis内存数据
  • AOF:记录每次增删查改的操作

本文将深入探讨RDB持久化的原理、配置、优缺点以及应用场景,下文将详细讲解AOF持久化

二、RDB持久化:数据快照

1. 工作原理

RDB通过创建某个时间点的数据快照来实现持久化。它就像给数据库拍了一张照片,将当前内存中的所有数据保存到磁盘上的一个二进制文件中。

核心机制:

内存数据(时刻T) → 生成快照 → 保存为dump.rdb文件

2. 触发方式

RDB提供了三种触发保存快照的方式:

方式一:配置文件自动触发(最常用)

redis.conf的配置文件在etc/redis/下

# redis.conf 配置示例 save 900 1 # 900秒内至少有1个key被修改,则触发保存 save 300 10 # 300秒内至少有10个key被修改,则触发保存 save 60 10000 # 60秒内至少有10000个key被修改,则触发保存 # 其他相关配置 dbfilename dump.rdb # RDB文件名 dir ./ # 保存目录 rdbcompression yes # 是否压缩(LZF算法) rdbchecksum yes # 是否进行CRC64校验 stop-writes-on-bgsave-error yes # bgsave出错时停止写入
方式二:手动执行SAVE命令(不推荐)

重要警告:SAVE命令会阻塞所有客户端请求!

SAVE命令会让当前Redis服务器进入备份操作,期间所有客户端的请求全部阻塞。慎重使用SAVE命令!

可能导致的严重后果:

  1. 应用程序无法从Redis获取数据
  2. 大量请求转向MySQL数据库
  3. MySQL服务器压力激增,可能导致宕机
  4. 整个系统服务不可用
  5. 年终奖可能就泡汤了!

方式三:手动执行BGSAVE命令(推荐)
  1. 接收命令:Redis主进程接收到bgsave命令。
  2. 检查前置条件:主进程先检查是否已有正在运行的bgsave子进程,若有则直接返回失败(避免重复写 RDB 文件);若没有则继续。
  3. 创建子进程:主进程调用fork()系统调用创建一个子进程,此时会发生写时拷贝。
  4. 主进程恢复服务:fork 完成后,主进程返回Background saving started,继续处理客户端请求,无阻塞
  5. 子进程写 RDB 文件:子进程遍历 fork 时刻的内存数据,将其序列化后写入临时 RDB 文件
  6. 替换旧 RDB 文件:子进程写完临时文件后,用临时文件替换掉旧的 RDB 文件。
  7. 通知主进程完成:子进程退出,并通过信号告知主进程持久化完成;主进程更新持久化状态(如记录日志等)。

3. RDB执行流程

4. 优缺点分析

优点:
  • 性能高:恢复大数据集时速度比AOF快
  • 文件紧凑:二进制格式,适合备份和灾难恢复
  • 最大化Redis性能:父进程无需磁盘I/O操作
缺点:
  • 可能丢失数据:两次快照之间的数据无法恢复
  • fork可能阻塞:数据量过大时,fork子进程可能耗时较长
  • 版本兼容性:不同版本的RDB文件格式可能不兼容

三、应用场景

适合使用RDB的场景:

  1. 数据备份:定期全量备份,便于灾难恢复
  2. 快速重启恢复:大数据集需要快速恢复服务
  3. 主从复制:初始化从节点时使用RDB文件
  4. 允许数据丢失:缓存场景,数据可以从源头重建

四、总结

RDB持久化是Redis提供的一种简单高效的数据持久化方案。它通过快照机制在特定时间点保存完整的数据集到磁盘,具有恢复速度快、文件紧凑、对性能影响小等优点。

关键要点:

  1. 三种触发方式:自动配置、SAVE(阻塞)、BGSAVE(非阻塞)
  2. 核心机制:fork子进程 + 写时复制
  3. 适用场景:允许少量数据丢失,追求快速恢复
  4. 注意事项:大数据集时fork可能阻塞,写操作多时可能有内存压力

下面是我的思维导图,仅供参考:

结语:

以上就是我分享的C++四大类型转换关键字的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步

谢谢观看

如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的

祝大家早安午安晚安

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

Excalidraw私有化部署成本分析:企业级应用考量

Excalidraw私有化部署成本分析:企业级应用考量 在当今分布式团队日益成为常态的背景下,如何高效地进行技术讨论、架构设计和产品原型沟通,已成为企业协作效率的关键瓶颈。传统的文档或静态图片难以承载动态思维过程,而市面上主流的…

作者头像 李华
网站建设 2026/5/26 3:49:29

Excalidraw评论功能:团队审阅沟通新方式

Excalidraw评论与AI图生图:重塑团队协作的视觉语言 在远程办公成为常态的今天,一个看似简单的问题却频繁困扰着技术团队:如何让设计评审不变成“你说东我指西”的沟通灾难?一张架构图背后可能藏着几十条散落在IM、邮件和会议纪要里…

作者头像 李华
网站建设 2026/5/26 3:49:27

Excalidraw权限管理:团队协作中的角色控制策略

Excalidraw权限管理:团队协作中的角色控制策略 在一场跨时区的产品评审会上,架构师刚刚完成微服务拓扑图的绘制,客户却误删了核心组件——这种场景在远程协作中并不罕见。随着可视化工具逐渐成为技术沟通的核心载体,如何在开放协…

作者头像 李华
网站建设 2026/5/26 3:49:25

Excalidraw开源协议解读:商用是否合规?

Excalidraw开源协议解读:商用是否合规? 在远程协作成为常态的今天,可视化工具早已不再是“锦上添花”,而是技术团队推进项目落地的核心生产力组件。尤其在敏捷开发、架构设计和产品评审等场景中,一张随手可画、实时共享…

作者头像 李华
网站建设 2026/5/26 3:49:22

Excalidraw与Miro对比:谁更适合技术团队使用?

Excalidraw与Miro对比:谁更适合技术团队使用? 在分布式协作成为常态的今天,一个简单的系统架构讨论,可能涉及跨越三个时区的六位工程师。会议开始前五分钟,有人发来链接:“画布已建好,直接点开就…

作者头像 李华
网站建设 2026/5/26 3:49:20

ExcalidrawDIY项目计划:手工制作步骤分解

ExcalidrawDIY项目计划:手工制作步骤分解 在远程协作日益成为常态的今天,团队沟通中的“信息落差”问题愈发突出——设计师苦于无法快速表达脑中构图,产品经理担心技术实现偏离预期,而工程师则疲于在文字需求和视觉呈现之间反复对…

作者头像 李华