当前位置: 首页 > news >正文

Redis 持久化之 RDB

Redis 持久化之 RDB

Redis 持久化之 RDB 详解


12.1 总体介绍

RDB(Redis DataBase)是 Redis 的一种持久化方式,它会在指定的时间间隔内,将内存中的数据集快照(Snapshot)写入磁盘。恢复数据时,直接将 RDB 文件读入内存即可。


12.2 RDB(Redis DataBase)详解

12.2.1 什么是 RDB?

RDB 是 Redis 的一种快照式持久化方案,核心特点:

  • 核心机制:将内存中某一时刻的所有数据,以二进制快照的形式写入磁盘文件(默认 dump.rdb)。
  • 恢复方式:启动 Redis 时,自动读取 dump.rdb 文件,将数据直接加载到内存中。

12.2.2 备份是如何执行的?

Redis 通过 fork() 子进程来执行持久化,完整流程如下:

  1. 父进程判断是否有其他子进程正在执行 RDB,若有则直接返回。
  2. 调用 fork() 系统调用,创建一个与父进程数据完全一致的子进程(采用写时复制技术)。
  3. 父进程继续响应客户端命令,不受持久化操作影响。
  4. 子进程将内存数据写入临时文件。
  5. 写入完成后,用临时文件替换旧的 dump.rdb 文件。
  6. 通知父进程持久化完成。

核心优势:主进程不进行任何 I/O 操作,确保极高的性能。


12.2.3 Fork 系统调用

  • 作用:复制一个与当前进程完全相同的子进程,子进程拥有和父进程一致的变量、环境变量和程序计数器。
  • 写时复制技术(Copy-On-Write)
    • 父进程和子进程初始共享同一段物理内存。
    • 只有当父进程或子进程修改内存内容时,才会将修改部分复制一份给子进程。
    • 既保证了数据一致性,又避免了内存的立即翻倍。

12.2.4 dump.rdb 文件

  • 配置方式:在 redis.conf 中配置文件名,默认文件名为 dump.rdb
  • 存储目录:可通过 config get dir 命令查询文件存储路径。

12.2.5 如何触发 RDB 快照?

1. 配置文件自动触发

redis.confsave 指令定义触发条件,格式:save <秒数> <修改次数>

  • 默认配置
    save 900 1    # 15分钟内有1次修改,触发快照
    save 300 10   # 5分钟内有10次修改,触发快照
    save 60 10000 # 1分钟内有10000次修改,触发快照
    
  • 禁用方式:不设置 save 指令,或传入空字符串 save ""

2. 手动命令触发

  • save 命令:同步执行,执行期间阻塞所有客户端请求,不建议生产环境使用。
  • bgsave 命令:异步执行,后台创建子进程进行快照,同时父进程可正常响应客户端请求(推荐)。
  • 查看状态:使用 lastsave 命令获取最后一次成功执行快照的时间。

3. 其他触发场景

  • 执行 flushall 命令时,会清空数据库并触发一次 RDB 快照(数据为空)。
  • Redis 正常关闭(shutdown)时,会自动执行一次 bgsave 快照。

12.2.6 关键配置项详解

1. stop-writes-on-bgsave-error

  • 配置:stop-writes-on-bgsave-error yes(推荐 yes
  • 作用:当 Redis 无法写入磁盘时,直接关闭写操作,避免数据不一致。

2. rdbcompression

  • 配置:rdbcompression yes(默认开启,推荐 yes
  • 作用:使用 LZF 算法对 RDB 文件进行压缩,节省磁盘空间(仅增加少量 CPU 消耗)。

3. rdbchecksum

  • 配置:rdbchecksum yes(默认开启,推荐 yes
  • 作用:使用 CRC64 算法进行数据校验,保证文件完整性(约增加 10% 性能消耗)。

12.2.7 RDB 文件的备份与恢复

1. 备份流程

  1. 查询 RDB 文件存储目录:config get dir
  2. dump.rdb 文件复制到安全位置,例如:
    cp dump.rdb /backup/dump_20250527.rdb
    

2. 恢复流程

  1. 关闭 Redis 服务。
  2. 将备份的 .rdb 文件复制到 Redis 工作目录,并重命名为 dump.rdb
  3. 启动 Redis,数据将自动从文件中加载。

12.2.8 RDB 的优势与劣势

✅ 优势

  1. 适合大规模数据恢复:二进制快照文件,恢复速度远快于 AOF。
  2. 性能开销低:子进程执行快照,不阻塞主进程。
  3. 文件紧凑:经过 LZF 压缩,占用磁盘空间小。
  4. 对数据一致性要求不高的场景更适用

❌ 劣势

  1. 数据丢失风险:两次快照之间的数据可能因 Redis 宕机而丢失。
  2. 内存消耗fork() 子进程时,数据量大时会占用额外内存。
  3. 性能影响:数据量过大时,fork() 操作耗时较长,可能短暂影响服务。

12.2.9 如何停止 RDB 持久化?

  1. 临时禁用(动态生效)
    redis-cli config set save ""
    
  2. 永久禁用:修改 redis.conf,删除所有 save 配置项,或设置 save ""

补充:RDB 与 AOF 的核心区别

特性 RDB AOF
持久化方式 快照式 命令追加式
数据完整性 可能丢失最后一次快照后的数据 最多丢失1秒数据(默认配置)
恢复速度
性能开销 低(子进程执行) 高(主进程执行追加)
文件大小 紧凑(压缩) 较大(记录所有命令)
http://www.jsqmd.com/news/899554/

相关文章:

  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署超详细
  • 开源项目实战指南:专业iOS降级工具LeetDown深度解析
  • AI 编码新玩法:慢工出细活,提升代码质量!
  • StreamFX终极指南:解锁OBS专业级视频特效的完整解决方案
  • 量子线性求解器性能实测:HHL、LCU与QSVT算法谁更胜一筹?
  • 计算机视觉驱动的鸭蛋双黄与裂纹与新鲜度无损检测【附代码】
  • 如何5分钟一键解锁Honey Select 2完整汉化与去码功能:终极增强指南
  • 告别繁琐操作!这款电子课本下载神器让教师备课效率翻倍 [特殊字符]
  • 从零构建AI智能体:n8n本地化部署与可视化自动化实战指南
  • C#调用C++ DLL部署失败的五大根因与实战排错指南
  • 学校要求AI率15%以下怎么办?2026年5月4款降AI软件深度推荐 - 我要发一区
  • OFDM-CVQKD:面向太赫兹无线量子通信的协议原理与性能分析
  • 从GPS模块到精准时钟:1PPS信号与NMEA数据协同授时全解析
  • 零成本金融数据分析:AKShare开源工具完整指南,Python轻松获取全球市场数据
  • 2026年 呼市设备吊装/工厂搬迁/厂房移位十大品牌推荐:精密搬运、大件运输、风电吊装与桥梁架设实力公司深度解析 - 品牌企业推荐师(官方)
  • UAV Log Viewer:免费开源无人机日志分析工具的终极指南
  • 一小时构建简历MCP服务器:基于Node.js与MCP协议的AI应用开发实战
  • CANoe实战指南:Log高效保存与智能回放策略
  • 保姆级教程:手把手教你用Pandas+Matplotlib搞定公交IC卡数据分析(含数据集)
  • 为 OpenClaw 配置 Taotoken 作为后端 AI 提供方
  • AI生成内容检出率检测工具免费方案详解:从原理到开源部署实战
  • AI Agent长期协作能力短板:揭秘Memory系统的构建与误区
  • 2026年Java面试牛客网高频考点全解析(附场景题+参考答案)
  • 从理论到实践:基于ROS与最小二乘法的六维力传感器静态标定全解析
  • 2026学生降AI率平台盘点:省时省力+高分适配哪家强?
  • Enovia License Server监控与扩点,这事我踩了三年坑才搞明白
  • 别再手动查规则了!ChatGPT一键解析《Gloomhaven》《Terraforming Mars》等硬核桌游的终极提示词库(含中文语境优化版,限前500名领取)
  • 异常日志记录の优化实践:从 `try..catch` 看异常日志打印的正确姿势
  • 量子克隆样本复杂度下界:基于阿贝尔态隐藏子群问题的稳定子态分析
  • Hot-48 旋转矩阵(确切说是方阵)