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

相关文章:

  • 基于FPGA的情绪感知系统设计方案:心理健康监测应用(一)
  • yggjs_rlayout框架v0.1.2使用教程 01快速开始
  • 基于RBF-GA的铝/镁异材FSLW工艺参数优化研究
  • Qt---架构文件.pro
  • 02-开发环境搭建与工具链
  • 鸿蒙中点击响应时延分析
  • 多核多线程应用程序开发可见性和乱序如何处理
  • css3之flex布局
  • Linux 学习笔记 - 集群管理篇
  • 音视频学习(五十五):H264中的profile和level
  • pyecharts可视化图表-scatter:从入门到精通
  • Trip Footprint旅行足迹App
  • jar包项目自启动设置ubuntu
  • Vue中 this.$emit() 方法详解, 帮助子组件向父组件传递事件
  • Altium Designer 22使用笔记(9)---PCB布局、布线操作
  • 复杂街景误检率↓79%!陌讯时空建模算法在非机动车乱停放检测的实战解析
  • 点播视频预览是怎么做到的?
  • VsCode使用SFTP连接Linux
  • 使用 Golang 的 Gin 框架实现一周极限编程计划:全网 AIGC 项目热点追踪应用
  • MATLAB 与 Simulink 联合仿真:控制系统建模与动态性能优化
  • yggjs_rlayout框架v0.1.2使用教程 02 TechLayout 布局组件
  • 上科大解锁城市建模新视角!AerialGo:从航拍视角到地面漫步的3D城市重建
  • nginx部署goaccess监控
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12
  • leetcode 1493 删掉一个元素以后全为1的最长子数组
  • mybatis过渡到mybatis-plus过程中需要注意的地方
  • 《Distilling the Knowledge in a Neural Network》论文PDF分享, 2015 年,谷歌提出了 “知识蒸馏” 的概念
  • 06 - spring security角色和权限设置
  • vulnhub-billu_b0x靶机渗透
  • GPT-5国内免费体验