news 2026/2/9 20:15:46

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/2/8 7:25:12

Excalidraw与Figma对比:UI设计初期哪个更强?

Excalidraw 与 Figma:谁才是设计初期的真正利器? 在一次产品需求评审会上,团队正为新功能的交互流程争论不休。产品经理在白板上画了几笔草图,工程师指着某个箭头说“这里逻辑不通”,设计师立刻拖动方框重新排布——十…

作者头像 李华
网站建设 2026/2/1 9:29:45

Excalidraw图形容器:分组管理复杂结构

Excalidraw图形容器:分组管理复杂结构 在一场远程架构评审会议上,团队正围绕一个微服务系统的草图激烈讨论。屏幕上布满了散落的矩形、箭头和文字标签——有人刚修改了“订单服务”的位置,结果不小心拖动了本属于“支付网关”的连接线&#x…

作者头像 李华
网站建设 2026/2/7 8:23:26

AI原生应用领域多租户的性能监控指标与方法

AI原生应用领域多租户的性能监控指标与方法关键词:AI原生应用、多租户架构、性能监控、指标体系、云原生技术摘要:随着AI技术与云原生架构的深度融合,"AI原生应用"已成为企业智能化转型的核心载体。这类应用的典型特征是支持多租户…

作者头像 李华
网站建设 2026/2/8 2:21:22

Excalidraw自定义素材库:建立专属图形资源中心

Excalidraw自定义素材库:建立专属图形资源中心 在技术团队日益依赖可视化协作的今天,一张清晰、一致且高效的架构图,往往比千言万语更能推动项目前进。然而现实是,每次画图都像是从零开始——Redis图标画得不像上次,微…

作者头像 李华
网站建设 2026/2/9 3:39:09

Unity3D 语音操控效果演示

基于 Unity3D 引擎实现语音控制的模型动画切换系统。自动识别麦克风并解析语音指令,如跳跃、奔跑、换弹、射击、待机等,使 3D 模型实时切换对应动画。同时支持场景切换与程序退出等功能。 Unity3D 语音操控效果演示

作者头像 李华
网站建设 2026/2/1 16:53:25

Excalidraw离线使用指南:无网络环境下的应对策略

Excalidraw离线使用指南:无网络环境下的应对策略 在金融系统架构评审会上,投影仪突然断网,白板上的微服务拓扑图再无法同步更新;野外勘探队的工程师试图用AI生成井场布局草图,却因卫星信号中断而被迫中止——这些场景暴…

作者头像 李华