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

Redis持久化:RDB与AOF,五分钟快速掌握

Redis之所以强大,不仅因为它快,还因为它提供了数据持久化机制,防止服务器重启或宕机导致数据丢失。Redis提供了两种主要的持久化方式:RDBAOF。以下是对于两种方式的解释

一、RDB(Redis Database)

是什么?

RDB就像是给Redis内存中的数据拍一张快照(Snapshot),并将这个二进制压缩文件保存到磁盘上。

如何工作?

  1. 手动触发: 执行 SAVE(阻塞)或 BGSAVE(后台异步)命令。
  2. 自动触发: 在配置文件中设置规则,例如 save 900 1 表示900秒内至少有1个key被改动,则自动触发BGSAVE

优点

  • 性能好: 父进程通过fork子进程来持久化,主进程几乎不受影响,性能最大化。
  • 文件紧凑: RDB文件是压缩后的二进制文件,体积小,非常适合灾难恢复快速备份
  • 恢复快: 重启Redis时,加载巨大的RDB文件比回放AOF日志要快得多。

缺点

  • 可能丢数据: 两次快照之间的数据改动,如果服务器宕机,则会丢失。
  • fork可能阻塞: 如果数据集非常大,fork子进程的过程可能会短暂阻塞主进程。

二、AOF(Append Only File)

是什么?

AOF更像是记录所有写操作命令的日志文件。每次执行一个写命令,这个命令就会以协议的格式追加到AOF文件的末尾。

如何工作?

  1. 记录日志: 服务器收到的每一个写命令(如 SET, SADD)都会写入缓冲区,再根据策略同步到磁盘的AOF文件。
  2. 重写机制(Rewrite): AOF文件会越来越大。Redis提供了 BGREWRITEAOF 命令,会fork一个子进程来创建一个新的、更小的AOF文件(通过合并冗余命令),替换旧的庞大数据。

优点

  • durability更强: 你可以配置不同的同步策略(appendfsync),最高可配置为每次写命令都同步到磁盘,最多丢失一秒的数据。
  • 可读性强: AOF文件是纯文本格式,记录了所有操作命令,便于理解和手动修复。

缺点

  • 文件更大: AOF文件通常比同数据集的RDB文件大。
  • 恢复慢: 重启时需要重新执行所有AOF文件中的命令来恢复数据,过程比加载RDB慢。
  • 对性能影响相对大: 如果配置为每次命令都同步(always),会对性能有一定影响。

三、如何选择?RDB vs AOF

特性

RDB

AOF

持久化方式

定时快照

记录每次写命令

数据安全性

可能丢失最后一次快照后的数据

根据策略,最多丢失一秒数据

文件大小

小(二进制压缩)

大(文本命令日志)

恢复速度

对性能影响

fork时可能阻塞

根据同步策略,影响可大可小

混合持久化(Redis 4.0+)

这是最好的选择!它结合了两者的优点。
工作原理: 在AOF重写时,子进程会先将当前内存的数据以RDB格式写入新的AOF文件开头,然后再将重写缓冲区的增量命令以AOF格式追加到文件。这样得到的AOF文件:

  • 前半部分是RDB二进制数据,恢复速度快。
  • 后半部分是增量AOF日志,数据更安全。

重启加载时,先加载RDB部分,再回放AOF日志,兼顾了速度和安全。

四、总结与建议

  1. 单纯做缓存,可以不用任何持久化
  2. 如果既要求速度又要求安全? 优先使用 混合持久化。
  3. 如果最关心数据安全,能容忍性能一点点下降? 使用 AOF 并配置 appendfsync everysec每秒同步
  4. 如果追求最快恢复速度,能容忍分钟级数据丢失? 使用 RDB
http://www.xdnf.cn/news/19724.html

相关文章:

  • React 第七十一节 Router中generatePath的使用详解及注意事项
  • 1. 从零开始搭建微服务架构1.0(登录模块)
  • 首屏优化讲解
  • springboot:数据校验
  • 【光照】Unity中的[光照模型]概念辨析
  • nginx关于root
  • AI使用指南:9月开学季,自动生成教学PPT
  • 基于 GEE 探索太湖区域 2010—2020 年增强型植被指数 EVI 时空变化
  • dify安装和配置
  • JS循环机制
  • 【ARMv7】开篇:掌握ARMv7架构Soc开发技能
  • 二叉树核心操作知识点整理
  • More Effective C++ 条款22:考虑以操作符复合形式(op=)取代其独身形式(op)
  • JAVA后端开发——forEach 与方法引用(::)详解
  • CoreShop微信小程序商城框架开启多租户-添加一个WPF客户端以便进行上传产品信息和图片(6)
  • 在本地使用 Docker 创建一个易受攻击的云环境
  • leetcode46.全排列
  • 【LLIE专题】一种语义感知知识引导的低照度图像增强方案
  • Day23 机器学习流水线(管道/pipeline)
  • 小程序开发:懒加载只加载当前和滑动到的图片
  • 【Doris入门】Doris数据表模型:主键模型(Unique Key Model)详解
  • 【重学MySQL】九十六、MySQL SQL Mode高效配置全攻略
  • Linux 孤儿进程 (Orphan Process)
  • 【学Python自动化】 6.1 Python 模块系统学习笔记 (与 Rust 对照)
  • Linux中命令收集
  • UE5 C++ 第三方动态库的使用
  • 「任天堂物语」08 任天堂的山寨时代
  • 递归进阶之全排列、组合
  • JS箭头函数
  • 数字铁流:2025.9.3国庆大阅兵系统架构解析