news 2026/7/10 2:44:56

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/7/10 15:56:15

基于Java+大数据+SSMB站数据分析可视化系统(源码+LW+调试文档+讲解等)/B站数据可视化/B站数据分析/B站分析系统/数据可视化系统/数据分析系统/B站数据平台/B站可视化工具

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/7/9 23:30:19

基于Python+大数据+SSMCBA球员数据可视化分析系统(源码+LW+调试文档+讲解等)/CBA球员数据展示系统/CBA球员数据统计系统/CBA球员数据分析平台/篮球数据可视化分析系统

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/7/10 18:57:35

Excalidraw导出PDF注意事项:格式保持完整

Excalidraw导出PDF注意事项:格式保持完整 在技术团队的日常协作中,一张架构图往往胜过千言万语。无论是向客户汇报系统设计,还是在站会上快速勾勒服务调用链路,可视化表达早已成为工程师沟通的“第二语言”。而随着远程办公常态化…

作者头像 李华
网站建设 2026/7/10 0:32:28

【C++】优选算法必修篇之双指针实战:移动零 复写零

应用场景 在算法中,双指针(Two Pointers) 是一种极具代表性的高效技巧。它通过维护两个索引或指针,在一次遍历中完成双层循环才能解决的问题,从而显著降低时间复杂度。常见的双指针形态主要分为两类:对撞指…

作者头像 李华
网站建设 2026/7/10 18:57:32

【C++】继承深度解析:继承方式和菱形虚拟继承的详解

一、继承方式1. 单继承一个派生类只有一个直接基类的时候称这个继承为单继承 Person ↓ Teacher ↓ Student (单链)代码语言:javascriptAI代码解释// 基类:人 class Person { public:string name;int age;void ShowPerson(){cout …

作者头像 李华
网站建设 2026/7/9 21:25:56

Excalidraw背景设置:更换画布颜色或图片

Excalidraw背景设置:更换画布颜色或图片 在团队协作日益依赖数字化工具的今天,一个直观、灵活的视觉表达平台往往能显著提升沟通效率。Excalidraw 作为一款开源的手绘风格白板工具,凭借其轻量、易用和高度可定制的特性,逐渐成为技…

作者头像 李华