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

Redis 持久化机制详解

最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。

持久化是指将内存中的数据保存到本地磁盘中,以防止服务器宕机时造成内存数据丢失。Redis 提供了两种主要的持久化机制:RDB 和 AOF。从 Redis 4.0 版本开始,还引入了混合持久化机制,结合了 RDB 和 AOF 的优势。

RDB 持久化(Redis DataBase)

RDB 是 Redis 默认的持久化方式,它通过生成内存数据的快照(snapshot)并将其保存到硬盘上的 dump.rdb 文件中来实现持久化。快照的生成周期可以通过配置文件中的 save 参数进行设置。

RDB 的优点:

  1. 文件紧凑:只有一个 dump.rdb 文件,便于备份和传输。
  2. 容灾性好:可以将文件保存到安全的磁盘或远程位置。
  3. 性能最大化:通过 fork 子进程执行持久化操作,主进程继续处理命令,仅存在毫秒级的请求延迟。
  4. 恢复效率高:在数据集较大时,RDB 的恢复速度比 AOF 更快。

RDB 的缺点:

• 数据安全性较低:由于是周期性持久化,如果在两次快照之间 Redis 发生故障,可能会丢失部分数据。


AOF 持久化(Append Only File)

AOF 持久化通过记录 Redis 执行的每一条写命令到单独的日志文件中(默认是 appendonly.aof),在重启时通过重新执行这些命令来恢复数据。

AOF 的优点:

  1. 数据完整性高:可以通过配置 appendfsync 选项(如 always)确保每次写操作都立即记录到 AOF 文件中。
  2. 容灾机制完善:即使 AOF 文件损坏,也可以通过 redis-check-aof 修复。
  3. AOF重写机制:AOF重写会在AOF文件体积过大(通过auto-aof-rewrite-percentage和auto-aof-rewrite-min-size参数控制增长率)时自动触发,或通过执行BGREWRITEAOF命令手动触发,其核心目的是通过遍历内存数据生成最精简的命令序列来替换臃肿的旧文件,从而解决持续追加命令导致的文件膨胀和恢复效率低下问题。

AOF 的缺点:

  1. 文件体积大:AOF 文件通常比 RDB 文件大。
  2. 恢复速度慢:需要逐条执行日志中的命令,恢复速度较慢。
  3. 启动效率低:在数据集较大时,AOF 的启动效率低于 RDB。

混合持久化(Redis 4.0+)

背景:

• RDB 恢复可能丢失大量数据。

• AOF 日志重放性能较差,大实例启动耗时久。

开启条件:

  1. 需要先开启 AOF(配置 appendonly yes)。
  2. 通过设置 aof-use-rdb-preamble yes 开启混合持久化。

优势:

Redis 重启时,先加载 RDB 内容(快速恢复大部分数据),再重放增量 AOF 日志,大幅提升重启效率。

文件结构:

混合 AOF 文件由两部分组成:

  1. RDB 格式的内容(存储某一时刻的数据快照)。
  2. AOF 格式的增量命令(记录快照之后的写操作)。

在这里插入图片描述

总结

• RDB 适合对恢复速度要求高、能容忍少量数据丢失的场景。

• AOF 适合对数据可靠性要求极高的场景。之前互联网工作经常用到的。

• 混合持久化结合了 RDB 和 AOF 的优点,是 Redis 4.0 及以上版本的推荐方案。当下工作使用的,技术一直在发展这个优势更大。

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

相关文章:

  • GD32入门到实战27--传感器任务框架搭建
  • 域内横向移动
  • AI 生成视频入门:用 Pika Labs+Runway ML 制作短内容
  • C++ numeric库简介与使用指南
  • 【LeetCode】1792. 最大平均通过率(康复-T1)
  • 校企合作| 长春大学旅游学院副董事长张海涛率队到访卓翼智能,共绘无人机技术赋能“AI+文旅”发展新蓝图
  • DAG与云计算任务调度优化
  • 【android bluetooth 协议分析 21】【ble 介绍 3】【ble acl Supervision Timeout 介绍】
  • 无人机系统理论基础(有课件)
  • 无人机小尺寸RFSOC ZU47DR板卡
  • 无人机传感器技术要点与难点解析
  • 【无人机三维路径规划】基于遗传算法GA结合粒子群算法PSO无人机复杂环境避障三维路径规划(含GA和PSO对比)研究
  • 基于YOLOv4的无人机视觉手势识别系统:从原理到实践
  • C++面试题
  • 股指期货是股市下跌的原罪,还是风险对冲好帮手?
  • 什么是 DNSSEC?
  • 面试tips--MySQLRedis--Redis 有序集合用跳表不用B+树 MySQL用B+树作为存储引擎不用跳表:原因如下
  • 278-基于Django的协同过滤旅游推荐系统
  • 详解Grafana k6 的阈值(Thresholds)
  • os.path:平台独立的文件名管理
  • sql执行过程
  • Tomcat 全面指南:从目录结构到应用部署与高级配置
  • Java-Spring入门指南(一)Spring简介
  • WPF曲线自定义控件 - CurveHelper
  • 大模型是如何“学会”思考的?——从预训练到推理的全过程揭秘
  • 【完整源码+数据集+部署教程】PHC桩实例分割系统源码和数据集:改进yolo11-Faster-EMA
  • 无需服务器,免费、快捷的一键部署前端 vue React代码--PinMe
  • 搭建分布式Hadoop集群[2025] 实战笔记
  • 【golang长途旅行第36站】golang操作Redis
  • 【自记】Python 中 简化装饰器使用的便捷写法语法糖(Syntactic Sugar)示例