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

相关文章:

  • 《WINDOWS 环境下32位汇编语言程序设计》第10章 内存管理和文件操作(2)
  • 文华财经wh6波段多空指标-变色K做多做空信号,抄底逃顶主图幅图
  • Docker启动两个Redis镜像并配置一主一从
  • Linux内核O(1)调度算法
  • 汽车制造工厂如何应用力控SCADA实现全方位智能监控与诊断
  • 从“成本中心”到“生产力引擎”:MCP如何将AI从“建议者”变为“执行者”
  • 2025年新版C语言 模电数电及51单片机Proteus嵌入式开发入门实战系统学习,一整套全齐了再也不用东拼西凑
  • 久等啦!Tigshop O2O多门店JAVA/PHP版本即将上线!
  • 通义万相Wan2.2-S2V-14B:AI视频生成的革命性突破与实践指南
  • c++ 类和对象(上)
  • 与后端对话:在React中优雅地请求API数据 (Fetch/Axios)
  • token存储方案
  • iOS XML 处理利器:CNXMLParser 与 CNXMLDocument 深度解析
  • 从零开始的python学习——函数(2)
  • 漫画短剧小程序系统开发:从0到1的核心架构与思路
  • 今天我们开始学习shell编程语言
  • @ZooKeeper 详细介绍部署与使用详细指南
  • 【JavaScript】前端两种路由模式,Hash路由,History 路由
  • 通过 FinalShell 访问服务器并运行 GUI 程序,提示 “Cannot connect to X server“ 的解决方法
  • NV115NV119美光固态闪存NV129NV112
  • 【53页PPT】华为制造行业数字化转型工业互联网智能制造解决方案(附下载方式)
  • Spring MVC BOOT 中体现的设计模式
  • Python 环境配置初学者指南:从安装到 Pycharm 项目配置
  • OpenHarmony HVB安全启动一键启停全栈实践:从U-Boot签名到fastboot解锁的闭环避坑指南
  • Python OpenCV图像处理与深度学习:Python OpenCV性能优化与高效图像处理
  • 为什么神经网络网络算法比机器学习模型算法更加强大?
  • 关于嵌入式学习——嵌入式硬件1
  • More Effective C++ 条款23:考虑使用其他程序库
  • 没有天硕工业级SSD固态硬盘,物联网痛点如何解决?
  • 虚实交互新突破:Three.js融合AR技术的孪生数据操控方法