[redis进阶一]redis的持久化(2)AOF篇章
目录
一 为什么有了RDB持久化机制还要有AOF呢
板书介绍具体原因:
编辑二 详细讲解AOF机制
(1)AOF的基本使用
1)板书如下
2)开启AOF机制:
3) AOF工作流程
(2)AOF是否会影响到redis性能
编辑
(3)AOF缓冲区刷新策略
(4)AOF的重写机制
板书如下:
为什么要有这个重写机制???
重写流程 :
(5)混合持久化
板书如下
启动时数据恢复
(6)对于信号的解释
四 本章重点回顾
一 为什么有了RDB持久化机制还要有AOF呢
原因:那肯定是RDB机制有无法满足需求的场景,肯定是RDB有缺点,所以才又引入了AOF机制
板书介绍具体原因:
二 详细讲解AOF机制
(1)AOF的基本使用
AOF(AppendOnlyFile)持久化:以独⽴⽇志的⽅式记录每次写命令,重启时再重新执⾏AOF ⽂件中的命令达到恢复数据的⽬的。AOF的主要作⽤是解决了数据持久化的实时性,⽬前已经是 Redis 持久化的主流⽅式。理解掌握好AOF持久化机制对我们兼顾数据安全性和性能⾮常有帮助。
1)板书如下

2)开启AOF机制:
开启AOF功能需要设置配置:appendonlyyes,默认不开启为no。AOF⽂件名通过 appendfilename 配置(默认是appendonly.aof)设置。保存⽬录同RDB持久化⽅式⼀致,通过dir 配置指定。AOF的⼯作流程操作:命令写⼊(append)、⽂件同步(sync)、⽂件重写 (rewrite)、重启加载(load),如图所⽰。
步骤一通过root用户使用vim打开以下文件:
ls /etc/redis/redis.conf
找到appendonly选项,默认为no

步骤二:修改 "appendonly"选项为yes并保存

3) AOF工作流程

- 所有的写⼊命令会追加到aof_buf(缓冲区)中。
- AOF缓冲区根据对应的策略向硬盘做同步操作。
- 随着硬盘AOF⽂件越来越⼤,需要定期对AOF⽂件进⾏重写,达到压缩的⽬的。
- 当Redis服务器启动时,可以加载AOF⽂件进⾏数据恢复。
命令写入:
AOF命令写⼊的内容直接是⽂本协议格式。例如sethelloworld这条命令,在AOF缓冲区会追加如下 ⽂本:
*3\r\n$3\r\nset\r\n$5\r\nhello\r\n$5\r\nworld\r\n此处遵守Redis格式协议,Redis选择⽂本协议可能的原因:⽂本协议具备较好的兼容性;实现简单; 具备可读性。
AOF过程中为什么需要aof_buf这个缓冲区?Redis使⽤单线程响应命令,如果每次写AOF⽂件都直 接同步硬盘,性能从内存的读写变成IO读写,必然会下降。先写⼊缓冲区可以有效减少IO次数,同 时,Redis还可以提供多种缓冲区同步策略,让⽤⼾根据⾃⼰的需求做出合理的平衡。
(2)AOF是否会影响到redis性能
讲解都在下边板书中
(3)AOF缓冲区刷新策略
板书如下:

⽂件同步:
Redis 提供了多种AOF缓冲区同步⽂件策略,由参数appendfsync控制,不同值的含义如表所⽰。

系统调⽤write和fsync说明:
• write操作会触发延迟写(delayedwrite)机制。Linux在内核提供⻚缓冲区⽤来提供硬盘IO性 能。write操作在写⼊系统缓冲区后⽴即返回。同步硬盘操作依赖于系统调度机制,例如:缓冲区 ⻚空间写满或达到特定时间周期。同步⽂件之前,如果此时系统故障宕机,缓冲区内数据将丢失。
• Fsync针对单个⽂件操作,做强制硬盘同步,fsync将阻塞直到数据写⼊到硬盘。
• 配置为always时,每次写⼊都要同步AOF⽂件,性能很差,在⼀般的SATA硬盘上,只能⽀持⼤ 约⼏百TPS写⼊。除⾮是⾮常重要的数据,否则不建议配置。
• 配置为no时,由于操作系统同步策略不可控,虽然提⾼了性能,但数据丢失⻛险⼤增,除⾮数据 重要程度很低,⼀般不建议配置。
• 配置为everysec,是默认配置,也是推荐配置,兼顾了数据安全性和性能。理论上最多丢失1秒的 数据。
(4)AOF的重写机制
板书如下:

总结重写机制:就比如你要算你的利润,这个月挣了6000杂七杂八花去2000,最后净利润4000,下个月在计算总利润的时候直接从这4000开始算,第一个月中干活挣了100买水花20又写文案挣了50买水果花60等等中间状态直接舍去,只看最后的状态
为什么要有这个重写机制???
答案:随着命令不断写⼊AOF,⽂件会越来越⼤,
为了解决这个问题,Redis引⼊AOF重写机制压缩⽂件体积。AOF⽂件重写是把Redis进程内的数据转化为写命令同步到新的AOF⽂件。 重写后的AOF为什么可以变⼩?有如下原因:
- 进程内已超时的数据不再写⼊⽂件。
- 旧的AOF中的⽆效命令,例如del、hdel、srem等重写后将会删除,只需要保留数据的最终版本。
- 多条写操作合并为⼀条,例如lpush list a、lpush list b、lpush list c可以合并为lpushlist a b c。
较⼩的AOF⽂件⼀⽅⾯降低了硬盘空间占⽤,⼀⽅⾯可以提升启动Redis时数据恢复的速度。
AOF重写过程可以⼿动触发和⾃动触发:
- ⼿动触发:调⽤bgrewriteaof命令。
- ⾃动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定⾃动触发时 机。
- auto-aof-rewrite-min-size:表⽰触发重写时AOF的最⼩⽂件⼤⼩,默认为64MB。
- auto-aof-rewrite-percentage:代表当前AOF占⽤⼤⼩相⽐较上次重写时增加的⽐例。
重写流程 :
板书如下



1)执⾏AOF重写请求。如果当前进程正在执⾏AOF重写,请求不执⾏。如果当前进程正在执⾏bgsave操作,重写命令 延迟到bgsave完成之后再执⾏。
2)⽗进程执⾏fork创建⼦进程。
3)重写:
a.主进程fork之后,继续响应其他命令。所有修改操作写⼊AOF缓冲区并根据appendfsync策 略同步到硬盘,保证旧AOF⽂件机制正确。
b.⼦进程只有fork之前的所有内存信息,⽗进程中需要将fork之后这段时间的修改操作写⼊ AOF重写缓冲区中。
4)⼦进程根据内存快照,将命令合并到新的AOF⽂件中。
5)⼦进程完成重写
a.新⽂件写⼊后,⼦进程发送信号给⽗进程。
b.⽗进程把AOF重写缓冲区内临时保存的命令追加到新AOF⽂件中。
c.⽤新AOF⽂件替换⽼AOF⽂件。
(5)混合持久化
板书如下

启动时数据恢复
当Redis启动时,会根据RDB和AOF⽂件的内容,进⾏数据恢复,如图所⽰。

(6)对于信号的解释
直接看板书讲解:

四 本章重点回顾

相关文章:
[redis进阶一]redis的持久化(2)AOF篇章
目录 一 为什么有了RDB持久化机制还要有AOF呢 板书介绍具体原因: 编辑二 详细讲解AOF机制 (1)AOF的基本使用 1)板书如下 2)开启AOF机制: 3) AOF工作流程 (2)AOF是否会影响到redis性能 编辑 (3)AOF缓冲区刷新策略 (4)AOF的重写机制 板书如下: 为什么要有这个重写机…...
【Linux我做主】探秘gcc/g++和动静态库
TOC Linux编译器gcc/g的使用 github地址 有梦想的电信狗 前言 在软件开发的世界中,编译器如同匠人的工具,将人类可读的代码转化为机器执行的指令。 对于Linux开发者而言,gcc和g是构建C/C程序的核心工具链,掌握它们的原理和使…...
Linux `init 0` 相关命令的完整使用指南
Linux init 0 相关命令的完整使用指南—目录 一、init 系统简介二、init 0 的含义与作用三、不同 Init 系统下的 init 0 行为1. SysVinit(如 CentOS 6、Debian 7)2. systemd(如 CentOS 7、Ubuntu 16.04)3. Upstart(如 …...
【英语语法】基本句型
目录 前言一:主谓二:主谓宾三:主系表四:主谓双宾五:主谓宾补 前言 英语基本句型是语法体系的基石,以下是英语五大基本句型。 一:主谓 结构:主语 不及物动词 例句: T…...
Vue3中发送请求时,如何解决重复请求发送问题?
文章目录 前言一、问题演示二、使用步骤1.One组件2.Two组件封装工具函数处理请求 总结 前言 在开发过程中,重复请求发送问题可能会导致数据不一致、服务器压力增加或用户操作异常。以下是解决重复请求问题的常见方法和最佳实践: 一、问题演示 我们看着…...
信息学奥赛一本通 1622:Goldbach’s Conjecture | 洛谷 UVA543 Goldbach‘s Conjecture
【题目链接】 ybt 1622:Goldbach’s Conjecture 洛谷 UVA543 Goldbach’s Conjecture 【题目考点】 1. 筛法求质数表 埃筛线性筛(欧拉筛) 知识点讲解见信息学奥赛一本通 2040:【例5.7】筛选法找质数 【解题思路】 首先使用埃…...
在极狐GitLab 身份验证中如何使用 OIDC?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 使用 OpenID Connect 作为认证提供者 (BASIC SELF) 您可以使用极狐GitLab 作为客户端应用程序,与 OpenID Connec…...
计算机视觉与深度学习 | 基于YOLOv8与光流法的目标检测与跟踪(Python代码)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 目标检测与跟踪 关键实现逻辑检测-跟踪协作机制特征点选择策略运动…...
解决 VSCode 中 NVM 配置后无法识别 Node 和 NPM 的问题
在开发中,我们经常需要使用 Node.js 和 NPM 来管理 JavaScript 项目依赖,而 NVM(Node Version Manager)是开发者在本地环境中管理多个 Node.js 版本的得力工具。不过,有时候在 VSCode 中配置完 NVM 后,可能…...
观察者模式:从博客订阅到消息队列的解耦实践
观察者模式:从博客订阅到消息队列的解耦实践 一、模式核心:用事件驱动实现对象间松耦合 在新闻 APP 中,当热点事件发生时需要实时通知所有订阅用户;在电商系统中,库存变化需触发价格监控模块重新计算。这类场景的核心…...
ReportLab 导出 PDF(页面布局)
ReportLab 导出 PDF(文档创建) ReportLab 导出 PDF(页面布局) ReportLab 导出 PDF(图文表格) PLATYPUS - 页面布局和排版 1. 设计目标2. 开始3. Flowables3.1. Flowable.draw()3.2. Flowable.drawOn(canvas,x,y)3.3. F…...
qt与html通信
**Cef视图(CefView)**是指在使用Chromium Embedded Framework(CEF)时,嵌入到应用程序中的浏览器视图。CEF是一个开源项目,它基于Google的Chromium浏览器,允许开发者将Web浏览器功能嵌入到自己的…...
git 根据http url设置账号密码
1. 原因 场景:有一种情况,比如在github上面有多个账号,并且每个账号都有些仓库的内容需要修改,并且这些账号自己,不是协作者的关系。这个时候需要针对每个仓库的url设置用户名密码, 2. 设置 2.1 第一步:…...
【CVE-2024-10929】ARM CPU漏洞安全通告
安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、建议措施 五、致谢 六、版本历史 一、概述 在部分基于Arm架构的CPU中发现了一个潜在安全问题,称为Spectre-BSE(Branch Status Eviction,分支状态驱逐…...
OpenCV 图形API(33)图像滤波-----高斯模糊函数gaussianBlur()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用高斯滤波器对图像进行模糊处理。 该函数使用指定的高斯核对源图像进行滤波。输出图像必须与输入图像具有相同的类型和通道数。 cv::gapi::g…...
【Android】 如何将 APK 内置为系统应用(适用于编辑设置属性)
如何将 APK 内置为系统应用(适用于编辑设置属性) 在 Android 中,将 APK 文件内置为系统应用涉及到一系列的命令和步骤。以下是详细的操作流程,帮助您解决常见问题,如 /system not in /proc/mounts 的错误。 挂载system/app获取可读写权限 …...
【2025最新版】火鸟门户v8.5系统源码+PC、H5、小程序 +数据化大屏插件
一.介绍 火鸟地方门户系统V8.5源码 系统包含4端: PCH5小程序APP 二.搭建环境 系统环境:CentOS、 运行环境:宝塔 Linux 网站环境:Nginx 1.2.22 MySQL 5.6 PHP-7.4 常见插件:fileinfo ; redis 三.测…...
关于 传感器 的详细解析,涵盖定义、分类、工作原理、常见类型、应用领域、技术挑战及未来趋势,结合实例帮助理解其核心概念
以下是关于 传感器 的详细解析,涵盖定义、分类、工作原理、常见类型、应用领域、技术挑战及未来趋势,结合实例帮助理解其核心概念: 一、传感器的定义与核心功能 1. 定义 传感器(Sensor)是一种能够将物理量ÿ…...
EtherCAT转ProfiNet边缘计算网关配置优化:汽车制造场景下PLC与机器人协同作业案例
1.行业背景与需求分析 智能汽车焊装车间是汽车制造的核心工艺环节,某德国豪华品牌在其上海MEB工厂新建的焊装车间中,采用西门子S7-1500PLC作为ProfiNet主站,负责整线协调与质量追溯;同时部署KUKAKR1500Titan机器人(Eth…...
极狐GitLab CI/CD 流水线计算分钟数如何管理?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 计算分钟管理 (PREMIUM SELF) 在极狐GitLab 16.1 中,从 CI/CD 分钟数重命名为计算配额或计算分钟数。 管理员可…...
HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议
是基于 TCP 协议的 80 端口的一种 C/S 架构协议。 特点:无状态 --- 数据传输完成后,会断开 TCP 连接,哪怕浏览器还正常运行。 请求报文 --- 方法 响应报文 --- 状态码 是一种面向连接的可靠传输协议 。 面向连接 --- 在传输数据之前&am…...
类和对象(下篇)(详解)
【本节目标】 1. 再谈构造函数 2. Static成员 3. 友元 4. 内部类 5. 再次理解封装 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 #include <iostream> using name…...
Uniapp:获取当前定位坐标
目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中,会出现打卡、定位当前位置的功能,那我们如何获取当前位置呢?这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...
最大子序和问题——动态规划/贪心算法解决
目录 一:问题描述 二:解决思路1——动态规划思想 三:C 语言代码实现 四:复杂度分析 五:解决思路2——贪心算法思想 六:具体步骤 七: C语言代码实现 八:复杂度分析 一:问题描述 …...
【Unity】JSON数据的存取
这段代码的结构是为了实现 数据的封装和管理,特别是在 Unity 中保存和加载玩家数据时。以下是对代码设计的逐步解释: 1. PlayerCoin 类 PlayerCoin 是一个简单的数据类,用于表示单个玩家的硬币信息。它包含以下字段: count&…...
LeetCode【剑指offer】系列(位运算篇)
剑指offer15.二进制中1的个数 题目链接 题目:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 思路一ÿ…...
unity socket 客户端和c#服务器通信
服务器 using BarrageGrab; using System; using System.Collections.Concurrent; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;namespace Lyx {class Server{private TcpListener listener;private Concurre…...
如何在Vue中实现取消聚焦el-select——从零到部署的完整指南
如何在Vue中实现取消聚焦el-select——从零到部署的完整指南 在开发Vue项目时,经常会遇到需要处理用户交互和组件状态管理的情况。特别是在使用Element UI组件库时,如何优雅地管理组件的状态显得尤为重要。本文将详细介绍如何在取消对话框时自动取消el-s…...
网络安全领域的AI战略准备:从概念到实践
网络安全领域的AI准备不仅涉及最新工具和技术的应用,更是一项战略必需。许多企业若因目标不明确、数据准备不足或与业务重点脱节而未能有效利用AI技术,可能面临严重后果,包括高级网络威胁数量的激增。 AI准备的核心要素 构建稳健的网络安全…...
《重构全球贸易体系用户指南》解读
文章目录 背景核心矛盾与理论框架美元的“特里芬难题”核心矛盾目标理论框架 政策工具箱的协同运作机制关税体系的精准打击汇率政策的混合干预安全工具的复合运用 实施路径与全球秩序重构阶段性目标 风险传导与反制效应内部失衡加剧外部反制升级系统性风险 范式突破与理论再思考…...

