Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置。Redis持久化中的Fork与Copy-on-Write技术解析。
Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置
一、RDB 持久化过程及特性
核心机制
- 生成快照:通过
fork子进程生成内存数据的二进制快照文件(.rdb),父进程继续处理请求。 - 写时复制(Copy-On-Write):
- 子进程持久化时,父进程对数据的修改会生成副本,保证快照数据的一致性。
- 快照完成后,用临时文件替换旧文件,确保文件完整性。
优缺点
| 优点 | 缺点 |
|---|---|
| 1. 恢复速度快:二进制文件直接加载到内存,适合大规模数据恢复。 2. 资源占用低:仅需 fork 子进程,主进程无 I/O 操作,性能影响小。3. 适合冷备:文件紧凑,便于远程存储和灾难恢复。 | 1. 数据丢失风险:最后一次快照后的修改可能丢失(默认最多丢失 5 分钟数据)。 2. 频繁 fork 开销:大数据量时,fork 可能阻塞主进程数毫秒至秒级。 |
二、AOF 持久化过程及特性
核心机制
- 日志追加:
- 先执行命令并写入内存,再将命令追加到 AOF 缓冲区,按策略(
appendfsync)同步到磁盘。 - 同步策略:
always(每次写)、everysec(默认,每秒)、no(依赖系统)。
- 先执行命令并写入内存,再将命令追加到 AOF 缓冲区,按策略(
- AOF 重写(Rewrite):
- 目的:压缩文件体积(如合并多次
INCR为SET)。 - 触发方式:手动执行
BGREWRITEAOF或自动根据文件增长比例(如auto-aof-rewrite-percentage 100)触发。
- 目的:压缩文件体积(如合并多次
优缺点
| 优点 | 缺点 |
|---|---|
| 1. 数据安全性高:默认每秒同步,最多丢失 1 秒数据。 2. 可修复性: redis-check-aof 工具可修复损坏的日志文件。3. 灾难恢复友好:误删操作可通过删除日志末尾命令恢复。 | 1. 文件体积大:相同数据集下,AOF 文件通常大于 RDB。 2. 恢复速度慢:需逐条执行命令,效率低于 RDB。 3. 写入压力:高并发场景下,频繁写入可能影响性能。 |
三、相关命令与默认配置
RDB 相关
- 命令:
SAVE:阻塞主进程生成快照(不推荐生产使用)。BGSAVE:后台异步生成快照(推荐)。
- 默认配置:
save 900 1 # 15 分钟内至少 1 次修改触发快照 save 300 10 # 5 分钟内至少 10 次修改 save 60 10000 # 1 分钟内至少 10000 次修改 dbfilename dump.rdb # 快照文件名 dir ./ # 存储目录
AOF 相关
- 命令:
BGREWRITEAOF:后台重写 AOF 文件。
- 默认配置:
appendonly no # 默认关闭 AOF appendfilename "appendonly.aof" appendfsync everysec # 每秒同步 auto-aof-rewrite-percentage 100 # 文件增长 100% 触发重写 auto-aof-rewrite-min-size 64mb # 最小重写文件大小
四、配置建议
1.混合持久化(Redis 4.0+):
结合 RDB 和 AOF,重写后的 AOF 文件包含 RDB 格式全量数据 + 增量 AOF 日志,提升恢复效率37。
2.双持久化启用:
同时开启 RDB 和 AOF,重启时优先加载 AOF(数据完整性更高)18。
3.灾难恢复:
定期将 RDB/AOF 文件备份至远程存储(如云存储),防止物理设备故障49。
Redis持久化中的Fork与Copy-on-Write技术解析
一、Fork机制的核心作用与原理
-
核心场景
- RDB快照生成:通过
BGSAVE命令创建子进程生成内存快照(dump.rdb)。 - AOF重写:通过
BGREWRITEAOF命令创建子进程压缩AOF日志。
- RDB快照生成:通过
-
Fork的本质
- 调用Linux系统的
fork()函数,创建主进程的逻辑副本。 - 子进程特点:
- 与父进程共享同一份物理内存的初始状态(通过虚拟内存映射实现)。
- 进程ID、文件描述符等元数据独立,但内存数据在未修改时无需实际复制。
- 调用Linux系统的
-
Fork的价值
- 非阻塞持久化:子进程独立处理持久化任务,主进程持续响应客户端请求。
- 数据一致性:子进程保存的是触发
fork()时的内存状态快照。
二、Copy-on-Write(COW)技术的核心逻辑
-
问题背景
- 原生Fork的缺陷:若直接复制全部内存,可能导致内存翻倍(例如16GB内存的机器,父进程占10GB时,子进程需额外10GB,引发OOM风险)。
-
COW的优化机制
- 共享物理内存:
fork()后,父子进程共享相同的物理内存页(仅虚拟内存空间独立)。 - 写操作触发复制:当父进程或子进程修改某一内存页时,内核自动复制该页(4KB单位),创建独立副本供修改方使用。
示例场景:
- 父进程在RDB生成期间修改了100MB数据 → 仅触发约25,600次4KB内存页复制(总增量约100MB,而非全量复制)。
- 共享物理内存:
-
COW的技术优势
维度 原生Fork COW优化后 内存占用 可能翻倍 仅复制修改部分 性能开销 高(全量复制) 低(按需复制) 适用性 小数据集 支持大规模数据
三、潜在风险与生产环境优化策略
-
Fork与COW的潜在问题
- 瞬间内存压力:
- 高写入负载下,大量COW操作导致内存峰值增长(公式:
内存增量 ≈ 父进程修改量)。 - 极端情况:若父进程在RDB生成期间持续写入,可能触发内存耗尽(OOM)。
- 高写入负载下,大量COW操作导致内存峰值增长(公式:
- Fork延迟:
- 数据量越大,
fork()调用耗时越长(与内存页表大小正相关)。 - 实测案例:50GB内存的Redis实例,
fork()延迟可达200ms以上,导致主线程短暂阻塞。
- 数据量越大,
- 瞬间内存压力:
-
生产环境优化方案
- 资源控制:
- 单实例数据量建议≤10GB,避免超大实例的fork延迟和COW压力。
- 使用SSD硬盘提升持久化效率,降低主线程阻塞风险。
- 资源控制:
仓库文章:
https://www.pdai.tech/md/db/nosql-redis/db-redis-x-rdb-aof.html
https://www.cnblogs.com/ybyn/p/14157568.html
相关文章:
Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置。Redis持久化中的Fork与Copy-on-Write技术解析。
Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置 一、RDB 持久化过程及特性 核心机制 生成快照:通过 fork 子进程生成内存数据的二进制快照文件(.rdb),父进程继续处理请求。写时复制(Copy-On-Write&…...
Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)
为什么需要理解CSP与GMP? 当我们启动一个Go程序时,可能会创建成千上万个goroutine,它们是如何被调度到有限的CPU核心上的?为什么Go能够如此轻松地处理高并发场景?为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…...
docker内安装达梦8数据库
1. 其他机器上实现挂载ISO # 1. 确保挂载点目录存在(你已经创建了dm8目录) ls -ld dm8# 2. 使用正确的mount命令挂载ISO sudo mount -o loop dm8_20250117_HWarm920_kylin10_sp1_64.iso dm8# 3. 验证是否挂载成功 mount | grep dm8 ls dm82. docker内运…...
UDP怎么样实现可靠传输?
如果需要在基于UDP的应用中实现可靠传输(例如确保数据不丢失、按顺序到达等),通常需要在应用层实现相应的机制。 1. 确认应答机制 应用层可以使用确认应答机制来确保数据的可靠传输。当发送方发送一个数据包时,接收方收到数据包…...
代码随想录算法训练营Day25
一、力扣93.复原IP地址【medium】 题目链接:力扣93.复原IP地址 left x300 视频链接:代码随想录 1、思路 时间复杂度: O ( n ) O(n) O(n) 2、代码 class Solution:def restoreIpAddresses(self, s: str) -> List[str]:n len(s)ans []…...
Linux服务器——Samba服务器
简介 Samba 是一个开源的跨平台文件共享服务,允许 Linux/Unix 系统与 Windows 系统实现文件和打印机的共享与互操作。其核心协议为 SMB/CIFS(Server Message Block / Common Internet File System),是 Windows 网络中…...
华为网路设备学习-17
目录 一、加密算法 二、验证算法 三、IPsec协议 1.IKE协议(密钥交换协议) ①ISAKMP(Internet Security Association and Key Management Protocol)互联网安全关联和密钥管理协议 ②安全关联(SA) ③…...
各开源协议一览
在 GitHub 上,开源项目通常会使用一些常见的开源协议来定义项目的使用、修改和分发规则。以下是目前 GitHub 上最常见的几种开源协议及其差异和示例说明: TL;DR 协议宽松程度是否强制开源专利保护适用场景MIT最宽松否无希望代码被广泛使用Apache 2.0宽松…...
解决python manage.py shell ModuleNotFoundError: No module named xxx
报错如下: python manage.py shellTraceback (most recent call last):File "/Users/z/Documents/project/c/manage.py", line 10, in <module>execute_from_command_line(sys.argv)File "/Users/z/.virtualenvs/c/lib/python3.12/site-packa…...
机器学习12-集成学习-案例
参考 【数据挖掘】基于XGBoost的垃圾短信分类与预测 【分类】使用XGBoost算法对信用卡交易进行诈骗预测 银行卡电信诈骗危险预测(LightGBM版本) 【数据挖掘】基于XGBoost的垃圾短信分类与预测 基于XGBoost的垃圾短信分类与预测 我分享了一个项目给你《【数据挖掘】基于XG…...
使用Ubuntu18恢复群晖nas硬盘数据外接usb
使用Ubuntu18恢复群晖nas硬盘数据外接usb 1. 接入硬盘2.使用Ubuntu183.查看nas硬盘信息3. 挂载nas3.1 挂载损坏nas硬盘(USB)3.2 挂载当前运行的nas 4. 拷贝数据分批传输 5. 新旧数据对比 Synology NAS 出现故障,DS DiskStation损坏,则可以使用计算机和 U…...
微服务系统记录
记录下曾经工作涉及到微服务的相关知识。 1. 架构设计与服务划分 关键内容 领域驱动设计(DDD): 利用领域模型和限界上下文(Bounded Context)拆分业务,明确服务边界。通过事件风暴(Event Storm…...
【数据库原理及安全实验】实验二 数据库的语句操作
目录 指导书原文 实操备注 指导书原文 【实验目的】 1) 掌握使用SQL语言进行数据操纵的方法。 【实验原理】 1) 面对三个关系表student,course,sc。利用SQL语句向表中插入数据(insert),然后对数据进行delete&…...
python 微信小程序支付、查询、退款使用wechatpy库
首先使用 wechatpy 库,执行以下命令进行安装 pip install wechatpy 1、 直连商户支付 import logging from django.http import JsonResponse from django.views.decorators.http import require_http_methods from wechatpy.pay import WeChatPay from wechatpy.…...
蓝桥杯备赛学习笔记:高频考点与真题预测(C++/Java/python版)
2025蓝桥杯备赛学习笔记 ——高频考点与真题预测 一、考察趋势分析 通过对第13-15届蓝桥杯真题的分析,可以发现题目主要围绕基础算法、数据结构、数学问题、字符串处理、编程语言基础展开,且近年逐渐增加动态规划、图论、贪心算法等较难题目。 1. 基…...
【BFT帝国】20250409更新PBFT总结
2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024 索引时间(可被引用): 240412 被引:…...
Linux-CentOS-7—— 配置静态IP地址
文章目录 CentOS-7——配置静态IP地址VMware workstation的三种网络模式配置静态IP地址1. 编辑虚拟网络2. 确定网络接口名称3. 切换到网卡所在的目录4. 编辑网卡配置文件5. 查看网卡文件信息6. 重启网络服务7. 测试能否通网8. 远程虚拟主机(可选) 其他补…...
Jupyter Lab 无法启动 Kernel 问题排查与解决总结
📄 Jupyter Lab 无法启动 Kernel 问题排查与解决总结 一、问题概述 🚨 现象描述: 用户通过浏览器访问远程服务器的 Jupyter Lab 页面(http://xx.xx.xx.xx:8891/lab)后,.ipynb 文件可以打开,但无…...
算法训练之位运算
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
linux入门三:Linux 编辑器
一、轻量级编辑器:快速上手的首选 1.1 Leafpad:极简主义的轻量之选 核心特点 轻量快速:体积小、启动快,资源占用极低,适合低配设备或快速编辑简单文件。 无复杂功能:仅支持基础文本编辑,界面…...
C++设计模式+异常处理
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…...
HttpServletRequest是什么
HttpServletRequest 是 Java Servlet API 中的一个接口,表示 HTTP 请求对象。它封装了客户端(如浏览器)发送到服务器的请求信息,并提供了访问这些信息的方法。 1. 基本概念 作用: HttpServletRequest 提供了一种机制&…...
checkra1n越狱出现的USB error -10问题解决
使用checkra1n进行越狱是出现: 解决办法(使用命令行进行越狱): 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条,同时按住home和电源键&#…...
golang-defer延迟机制
defer延迟机制 defer是什么 defer是go中一种延迟调用机制。 执行时机 defer后面的函数只有在当前函数执行完毕后才能执行。 执行顺序 将延迟的语句按defer的逆序进行执行,也就是说先被defer的语句最后被执行,最后被defer的语句,最先被执…...
【小沐学Web3D】three.js 加载三维模型(Angular)
文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了…...
一种替代DOORS在WORD中进行需求管理的方法 (二)
一、前景 参考: 一种替代DOORS在WORD中进行需求管理的方法(基于WORD插件的应用)_doors aspice-CSDN博客 二、界面和资源 WORD2013/WORD2016 插件 【已使用该工具通过第三方功能安全产品认证】: 1、 核心功能 1、需求编号和跟…...
一个基于ragflow的工业文档智能解析和问答系统
工业复杂文档解析系统 一个基于ragflow的工业文档智能解析和问答系统,支持多种文档格式的解析、知识库管理和智能问答功能。 系统功能 1. 文档管理 支持多种格式文档上传(PDF、Word、Excel、PPT、图片等)文档自动解析和分块处理实时处理进度显示文档解析结果预览批量文档…...
23种设计模式-行为型模式-访问者
文章目录 简介场景解决完整代码核心实现 总结 简介 访问者是一种行为设计模式,它能把算法跟他所作用的对象隔离开来。 场景 假如你的团队开发了一款能够使用图像里地理信息的应用程序。图像中的每个节点既能代表复杂实体(例如一座城市)&am…...
WebView2最低支持.NET frame4.5,win7系统
WebView2最低支持.NET frame什么版本 WebView2 对 .NET Framework 的最低版本要求 基础支持范围 WebView2 官方支持的 .NET Framework 最低版本为 4.5,同时兼容 .NET Core 3.0 及以上版本18。对于 WPF、WinForms 等桌面应用开发,需确…...
WHAT - React 组件的 props.children 属性
目录 一、什么是 children二、基本用法三、类型定义(TypeScript)四、一些高级用法1. 条件渲染 children2. 多个 children 插槽(命名插槽) 五、children 的优势总结 在 React 中,children 是一个非常重要且特殊的 内置属…...
