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

十一、redis 入门 之 数据持久化

一、概述

Redis 的 RDB(Redis Database) 和 AOF(Append Only File) 是两种核心持久化机制,用于将内存中的数据持久化到磁盘,避免服务重启后数据丢失

RDB

RDB 是一种 快照式 持久化方式:通过周期性生成内存中 全量数据的二进制快照文件(.rdb 文件),将某一时刻的完整数据状态保存到磁盘。恢复时直接加载该二进制文件到内存,快速恢复数据。

AOF

AOF 是一种 日志式 持久化方式:通过记录 Redis 所有 写操作命令(如 SET、HSET、LPUSH 等) 到文本文件(.aof 文件),恢复时通过 “重新执行” 文件中的命令,还原数据状态。

二、RDB

1、执行过程

  1. 触发机制

    • 自动触发:通过 Redis 配置文件(redis.conf)设置触发条件,例如:
      • save 900 1:900 秒内有 1 次键修改,触发 RDB;
      • save 300 10:300 秒内有 10 次键修改,触发 RDB;
      • save 60 10000:60 秒内有 10000 次键修改,触发 RDB。
    • 手动触发:通过命令主动生成 RDB:
      • SAVE:阻塞 Redis 主线程,直到 RDB 生成完成(不推荐生产环境,会导致服务不可用);
      • BGSAVE:fork 一个子进程负责生成 RDB,主线程继续处理客户端请求(生产环境常用)。
  2. 生成流程

    • 触发后,子进程(或主线程)读取内存中的全量数据;
    • 将数据压缩为二进制格式,写入临时文件;
    • 临时文件生成完成后,替换旧的 .rdb 文件(原子操作,避免文件损坏);
    • 持久化完成,释放资源。
  3. 恢复流程

    • Redis 启动时,若检测到磁盘上有 .rdb 文件,会自动加载该文件到内存;
    • 加载期间 Redis 阻塞客户端请求,加载完成后服务正常对外提供服务。

2、特性

  • 文件格式:二进制文件,体积小、加载速度快(二进制解析效率高于文本);
  • 数据丢失最终一致性—— 两次 RDB 生成间隔内的数据(如刚修改但未触发快照)会丢失;
  • 性能影响
    • 生成时(BGSAVE):fork 子进程会消耗少量内存(复制主线程页表),但主线程无阻塞;
    • 恢复时:阻塞服务,适合数据量不大的场景;
  • 灵活性:支持通过 stop-writes-on-bgsave-error 配置(默认开启)—— 若 BGSAVE 失败,Redis 停止接收写请求,避免数据不一致。

三、AOF 

1、执行过程

AOF 的核心是 “命令记录 - 日志刷盘 - 命令重放”,关键依赖 刷盘策略 控制数据安全性:

  1. 命令记录流程

    • 客户端执行写命令,Redis 先执行命令(更新内存数据);
    • 命令被追加到内存中的 AOF 缓冲区(aof_buf)(避免频繁磁盘 I/O);
    • 根据配置的 刷盘策略,将缓冲区数据写入 .aof 文件。
  2. 关键:刷盘策略(配置 appendfsync

    • appendfsync always:每执行 1 条写命令,立即刷盘(最高安全性,但频繁 I/O 导致性能损耗最大);
    • appendfsync everysec:每秒刷盘 1 次(平衡安全性与性能,默认值)—— 最多丢失 1 秒内的数据;
    • appendfsync no:由操作系统决定刷盘时机(最低安全性,性能最好,依赖 OS 缓存,可能丢失大量数据)。
  3. AOF 重写(避免日志文件膨胀)

    • 问题:AOF 文件会随写命令累积而变大(如多次修改同一键,会记录多条 SET 命令),导致恢复变慢;
    • 解决:AOF 重写—— 通过 BGREWRITEAOF 命令(或自动触发),fork 子进程将 “内存中当前数据” 转换为 “最少命令集”(如多条 SET key value 合并为 1 条),生成新 .aof 文件,替换旧文件;
    • 自动触发:通过 auto-aof-rewrite-percentage(默认 100%)和 auto-aof-rewrite-min-size(默认 64MB)—— 当 AOF 文件体积比上次重写后大 100%,且当前体积 ≥64MB 时触发。
  4. 恢复流程

    • Redis 启动时,若同时开启 RDB 和 AOF,优先加载 AOF 文件(AOF 数据更完整);
    • 逐行执行 .aof 文件中的命令,还原内存数据(若文件有损坏,可通过 redis-check-aof 工具修复)。

2. 关键特性

  • 文件格式:文本文件(可直接查看命令,便于调试),体积较大(命令 + 参数存储);
  • 数据一致性高一致性—— 通过 always 策略可实现 “数据不丢失”(除非磁盘故障);
  • 性能影响
    • 记录时:刷盘策略决定性能(everysec 是生产常用平衡方案);
    • 恢复时:命令逐行执行,数据量越大恢复越慢(比 RDB 慢);
  • 可靠性:支持 “破损文件修复”,通过 redis-check-aof --fix 可移除 AOF 文件中无效的命令。

四、对比

  • 若需 快速备份、灾备传输、数据量小,优先用 RDB;
  • 若需 生产环境高数据一致性、避免数据丢失,优先用 AOF(刷盘策略选 everysec);
  • Redis 4.0+ 推荐开启 混合持久化,平衡性能与安全性。

五、混合持久化(Redis 4.0+ 特性)

为结合 RDB 和 AOF 的优势,Redis 4.0 引入 混合持久化(配置 aof-use-rdb-preamble yes):

  • 原理:AOF 重写时,先将当前内存数据以 RDB 格式写入新 AOF 文件开头,再将重写后的增量命令以 AOF 格式追加到后面;
  • 优势:恢复时 —— 先快速加载 RDB 部分(全量数据),再执行 AOF 增量命令(补全最新数据),兼顾 “恢复速度” 和 “数据完整性”。

http://www.dtcms.com/a/349117.html

相关文章:

  • [滑动窗口]1493. 删掉一个元素以后全为 1 的最长子数组
  • 3.6 虚拟存储器 (答案见原书 P225)
  • 国内第一本系统介绍 Obsidian 的书出版了
  • 基于Python的淘宝电商服装价格可视化分析
  • 【知识杂记】卡尔曼滤波及其变种,从理论精要到工程实践深入解析
  • AI代理需要数据完整性
  • C++ 可变参数模板(Variadic Templates)
  • 2025年09月计算机二级Java选择题每日一练——第六期
  • c#_数据持久化
  • LangGraph 那点事
  • 自定义SpringBoot的自动配置
  • 从零到精通:如何用 Python 高效查找数组中出现频率最高的元素
  • leetcode刷题记录04——top100题里的7道中等题
  • 网络编程-创建TCP协议服务器
  • 后端Web实战-Java代码操作数据库
  • 跨摄像头追踪精度↑79%!陌讯动态决策模型在智慧园区的落地实践
  • 跨摄像头追踪准确率↑18%!陌讯时空感知算法在智慧安防的实战解析
  • 复杂场景鲁棒性突破!陌讯自适应融合算法在厂区越界检测的实战优化​
  • 使用Localtunnel搭建与外网交互简单的https本地服务器
  • 时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
  • Windows 系统下 Android SDK 配置教程
  • 【数据结构与算法】并查集
  • 对象作为HashMap的key的注意事项
  • kubernetes集群搭建
  • 【贪心算法】day2
  • Golang云端编程入门指南:前沿框架与技术全景解析
  • 初探机器学习:从概念定义到前沿应用
  • 湖南(源点咨询)市场调研如何在行业研究中快速有效介入(尾篇)
  • mpv - write_video 流程解析
  • 从技术精英到“芯”途末路:一位工程师的沉沦与救赎