Redis 持久化机制:RDB 和 AOF
Redis 持久化机制:RDB 和 AOF
Redis 主要提供了两种持久化方式:**RDB(Redis Database)**和 AOF(Append-Only File)。它们各自的实现原理、优缺点以及适用场景如下。
1. RDB(Redis Database)原理
1.1 RDB 机制
RDB 采用 快照(Snapshotting) 方式定期将 内存中的数据 持久化到磁盘。Redis 会在特定时间点创建数据的二进制快照并存储到 .rdb
文件中。
RDB 触发方式:
-
手动触发:
SAVE
:同步保存快照,会阻塞 Redis,直到保存完成。BGSAVE
:异步保存快照,创建子进程执行快照操作,不影响主进程处理请求。
-
自动触发:
- 配置
save
规则(默认开启),例如:save 900 1 # 900秒(15分钟)内至少有1次写操作 save 300 10 # 300秒(5分钟)内至少有10次写操作 save 60 10000 # 60秒(1分钟)内至少有10000次写操作
- 执行
SHUTDOWN
时,若未启用 AOF,则 RDB 触发保存。 - Redis 复制(Replication)时,主节点自动生成 RDB 发送给从节点进行全量同步。
- 配置
1.2 RDB 工作流程
-
执行
BGSAVE
:- Redis **fork(分叉)**一个子进程。
- 子进程 遍历整个数据集,将其序列化为二进制格式存储到磁盘文件
dump.rdb
。 - 完成后,替换旧的 RDB 文件。
-
RDB 文件格式
- RDB 文件是二进制格式,存储结构紧凑,便于快速加载。
1.3 RDB 优缺点
优点 | 缺点 |
---|---|
适合全量数据备份,占用存储小 | 可能导致数据丢失(最近一次 RDB 之后的变更未保存) |
RDB 结构紧凑,恢复速度快 | BGSAVE 需要 fork 进程,内存占用增加 |
适用于大规模数据冷备 | SAVE 操作会阻塞主线程 |
2. AOF(Append-Only File)原理
2.1 AOF 机制
AOF 采用 日志追加(Append-Only Log) 方式,每次执行写操作(SET、HSET、LPUSH 等)时,将命令追加到 .aof
文件。
AOF 触发方式:
- 配置
appendonly yes
开启 AOF 。 - AOF 采用 追加写入,并根据
appendfsync
配置决定何时同步到磁盘:appendfsync always # 每次写操作都 fsync(最安全但影响性能) appendfsync everysec # 每秒 fsync 一次(默认,权衡性能和安全) appendfsync no # 交由操作系统决定何时 fsync(最高效但不安全)
2.2 AOF 工作流程
-
写入日志:
- 每次有写操作,Redis 先写入内存 命令日志,然后追加到 AOF 文件。
-
AOF 文件同步(
appendfsync
):- 根据
appendfsync
策略,将数据刷入磁盘。
- 根据
-
AOF 重写(Compaction):
- 随着时间推移,AOF 文件不断增长,Redis 定期重写(Rewrite) AOF 文件:
- 触发方式:
- 手动触发:
BGREWRITEAOF
- 自动触发:Redis 判断 AOF 文件大小增长达到阈值后触发。
- 手动触发:
- 重写机制:
- 创建子进程读取现有数据库状态,并以最少的命令重新写入 AOF。
- 新文件生成后,替换旧 AOF 文件。
2.3 AOF 优缺点
优点 | 缺点 |
---|---|
数据持久性更强,丢失数据少 | AOF 文件比 RDB 大,写入速度慢 |
日志模式可读性好,可用于审计 | AOF 恢复速度比 RDB 慢 |
可自动重写,优化存储 | fsync 频率影响性能 |
3. 如何选择 RDB 和 AOF?
3.1 选择 RDB 的场景
✅ 适用于:
- 冷备份场景(如每天凌晨备份)
- 不太关注最近几秒的数据丢失
- 高性能读取(RDB 加载速度快)
- 主从复制初始化(Redis 复制默认使用 RDB)
❌ 不适用于:
- 数据丢失敏感场景
- 频繁写入的大型 Redis 实例(
BGSAVE
会占用大量内存)
3.2 选择 AOF 的场景
✅ 适用于:
- 数据持久化要求高(如金融、电商系统)
- 实时记录 Redis 变更
- 希望可读的日志文件(如数据审计、问题排查)
❌ 不适用于:
- 对恢复速度要求极高(AOF 启动慢)
- 存储受限的环境(AOF 文件比 RDB 大)
3.3 RDB + AOF 组合方案
- 推荐同时开启 RDB 和 AOF:
- RDB 负责 定期备份,保证快速恢复。
- AOF 负责 增量持久化,减少数据丢失。
示例配置
# 启用 AOF
appendonly yes
appendfsync everysec# 启用 RDB
save 900 1
save 300 10
save 60 10000
在 Redis 6.0 之后,AOF 支持混合模式(RDB+AOF),减少 AOF 体积:
aof-use-rdb-preamble yes
- 开启后,AOF 先写入 RDB 格式,再记录增量日志。
4. 总结对比
对比项 | RDB | AOF |
---|---|---|
存储方式 | 二进制快照 | 追加日志 |
触发方式 | 定期触发 BGSAVE | 实时追加 |
恢复速度 | 快 | 慢(重放日志) |
数据丢失风险 | 最后一次快照后的数据丢失 | 丢失最近 1s/无丢失(视 appendfsync ) |
磁盘占用 | 小 | 大 |
写入性能 | 高 | 低 |
适用场景 | 读密集、全量备份 | 事务安全、审计、低丢失 |
5. 结论
- 如果数据丢失不可接受,用 AOF。
- 如果恢复速度最重要,用 RDB。
- 如果既要可靠性又要性能,同时开启 RDB 和 AOF,开启
aof-use-rdb-preamble
。
这样可以平衡性能、存储和数据安全,让 Redis 运行更稳定。
相关文章:
Redis 持久化机制:RDB 和 AOF
Redis 持久化机制:RDB 和 AOF Redis 主要提供了两种持久化方式:**RDB(Redis Database)**和 AOF(Append-Only File)。它们各自的实现原理、优缺点以及适用场景如下。 1. RDB(Redis Database&…...

【博客之星评选】2024年度前端学习总结
故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年,满心激动与自豪,我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新,这次能走到这…...

将IDLE里面python环境pyqt5配置的vscode
首先安装pyqt5全套:pip install pyqt5-tools 打开Vscode: 安装第三方扩展:PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】,便可直接打开UI文件,进行编辑。 配置pyuic,如果下图填写方法使用…...

【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列
1.题目解析 2.讲解算法原理 1.首先画出决策树,越详细越好 2.设计代码 全局变量 List<List<Integer>> retList<Integer> pathboolean[] check dfs函数 仅关心某一节点在干什么 细节问题回溯 干掉path最后一个元素修改check权限 剪枝 check中为…...

使用傅里叶变换进行图像边缘检测
使用傅里叶变换进行图像边缘检测 今天我们介绍通过傅里叶变换求得图像的边缘 什么是傅立叶变换? 简单来说,傅里叶变换是将输入的信号分解成指定样式的构造块。例如,首先通过叠加具有不同频率的两个或更多个正弦函数而生成信号f(x…...

DDD FAQs梳理
术语 领域:一种专门活动的范围、部类。 子域:一个领域细分出的多个子领域。 核心域:具备核心竞争力的子域。 通用域:同时被多个子域使用的通用功能子域,比如认证、权限。 支撑域:一些辅助性或后台功能组成…...

新星杯-ESP32智能硬件开发--SoC基础
本博文内容导读 1、当前嵌入式系统的发展情况,分析SoC作为物联网开发的重要技术,是未来物联网发展重要方向。 2、介绍SoC系统的组成和系统特点,了解SoC打下SoC基础。 3、介绍基于ESP32的SoC系列开发板,ESP32开发的系统功能进行总…...

WDM_OTN_基础知识_波分系统的网络位置
波分系统简介和OTU 在这节课的内容中,我们主要介绍,波分系统在整个通信网络中的位置,波分系统的构成和它的架构,波分设备的构成和信号图,以及OUT的功能和分类及波分系统的应用场景。 波分系统在整个通信网络中&#x…...

计算机网络 (46)简单网络管理协议SNMP
前言 简单网络管理协议(SNMP,Simple Network Management Protocol)是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议,它使网络管理员能够管理网络效能,发现并解决网…...

Excel重新踩坑6:工作实战总结之根据筛选条件求平均成绩
一、前言: 这个博客的实战场景:给了一组学生数据,这些数据中,有全市20个社区,1-9年级的学生各科成绩。要求按照各社区统计1-9年级的所有学生各科平均值。下面首先介绍会用到的一些函数,然后再简单说明实战…...

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出,详见以下博客: Spring Boot Apache POI 实现 Exc()el 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并&#…...

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识
20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识 2025/1/18 15:12 缘起:做飞凌OK3588-C开发板/核心板【Linux R4】的时候,测试/生产要求没有开机LOGO【飞凌/Rockchip】 要求:黑屏或者中性界面。…...

《Hands_On_LLM》8.3: 检索增强生成-RAG技术概论
3.检索增强生成 (Retrieval-Augmented Generation (RAG)) LLM 的大规模应用很快导致人们向它们提问,并期望得到符合实际的答案。虽然这些模型可以正确回答一些问题,但它们也自信地回答了许多错误的问题。为了纠正这种行为,业界转而采用的主要…...

CSS中样式继承+优先级
继承属性和非继承属性 一、定义及分类 1、继承属性是指在父元素上设置了这些属性后,子元素会自动继承这些属性的值,除非子元素显式地设置了不同的值。 常见的继承属性: 字体 font 系列文本text-align text-ident line-height letter-spacing颜色 col…...
Vue进阶之旅:核心技术与页面应用实战(路由进阶)
文章目录 一、路由模块封装二、声明式导航(一)导航链接与高亮(二)声明式导航传参1. 查询参数传参2. 动态路由传参 三、路由重定向、404 与模式设置(一)路由重定向(二)路由 404&#…...

单片机存储器和C程序编译过程
1、 单片机存储器 只读存储器不是并列关系,是从ROM发展到FLASH的过程 RAM ROM 随机存储器 只读存储器 CPU直接存储和访问 只读可访问不可写 临时存数据,存的是CPU正在使用的数据 永久存数据,存的是操作系统启动程序或指令 断电易失 …...
Vue.js 动态设置表格最大高度的实现
概述 在现代 Web 开发中,响应式设计至关重要,尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响,如分页、合计行或动态内容,这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight…...

Java测试开发平台搭建(九)前端
1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件: cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错: 修改vue.config.jsconst { defineConfig }…...
MySQL多表查询练习
1.找出销售部门中年纪最大的员工的姓名 mysql> select name,age from dept a ,emp_new b where a.dept1b.dept2 and dept_name销售order by age desc limit 1; ------------ | name | age | ------------ | 荣七 | 64 | ------------ 1 row in set (0.00 sec) 2.求财务…...

低代码运维与管理服务
文章目录 前言一、服务内容二、服务范围三、服务流程四、服务交付件五、责任矩阵六、验收标准 前言 随着云计算技术的发展,数字化转型是企业的必然选择,企业需要实现广泛的连接并走向开放,传统集成工具无法满足当前企业面临的数字化转型诉求…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...