当前位置: 首页 > 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.zskr.cn/news/1407974.html

相关文章:

  • 从信息论视角看LLM幻觉:压缩伪影的本质与工程应对
  • 融资 700 亿传闻背后,DeepSeek Code 真要来了吗?
  • 保姆级教程:用MaixHub和K210从零训练一个‘防瞌睡提醒器’模型
  • 网盘下载神器LinkSwift:一站式解决九大网盘下载难题的完整指南
  • Python私有方法本质:名称改写而非访问控制
  • 主权AI服务NorthStar LLM API:数据驻留、合规与本地化AI推理实践
  • 2026年 呼市设备吊装/工厂搬迁/厂房移位十大品牌推荐:精密搬运、大件运输、风电吊装与桥梁架设实力公司深度解析 - 品牌企业推荐师(官方)
  • AI Agent长期协作能力短板:揭秘Memory系统的构建与误区
  • 从工业控制到物联网:深入解析开关量、模拟量与数字量的核心差异与应用
  • 实时追踪AI成本:从模糊消费到精准资源管理的开发习惯重塑
  • 百考通AI:智能数据分析,轻松输出专业内容
  • 星露谷农场规划器:5个简单步骤打造完美游戏农场布局设计
  • 基于知识图谱的python个性化学习路径推荐系统项目源码
  • 抗体芯片助力凋亡、应激信号通路研究
  • 强人工智能的发展需要突破哪些技术瓶颈?
  • 天津包车价格最新行情:十佳排名与靠谱公司深度解析 - 米米Ada
  • 告别枯燥理论:用Ettercap在Kali Linux上实战ARP欺骗,5分钟抓取HTTP明文密码
  • Hot-48 旋转矩阵(确切说是方阵)
  • 零成本金融数据分析:AKShare开源工具完整指南,Python轻松获取全球市场数据
  • 华硕笔记本优化终极指南:G-Helper轻量级控制中心完整使用手册
  • 提取矩阵特定多行元素
  • Pearcleaner:macOS终极清理指南,5分钟释放30%磁盘空间
  • 为 OpenClaw 配置 Taotoken 作为后端 AI 提供方
  • 如何用ESP32构建智能物联网项目?从入门到实战的完整指南
  • Keras实战:构建孪生神经网络(Siamese Network)实现图像相似度精准比对
  • 从零构建AI智能体:n8n本地化部署与可视化自动化实战指南
  • 多路径RDMA传输中基于乱序度的智能丢包恢复方案OrderRE
  • 定制作业本为什么首选源头工厂?撕掉中间商差价,看清校园定制真实优势
  • 从零开始:用Python和PyTorch一步步实现MANO模型的手势3D坐标预测(附完整代码)
  • 量子退火优化集成学习训练空间剪枝:兼顾精度与多样性的新方法