Redis 数据持久化之AOF

AOF(Append Only File)

在这里插入图片描述

在这里插入图片描述
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之redis重启的化就根据日志文件的内容将写指令从前往后执行一次以完成数据的恢复工作。
在这里插入图片描述
默认情况下,redis是没有开启AOF(append only file)的,开启AOF功能需要设置配置:appendonly yes
AOF保存的是appendonly.aof文件

AOF持久化的工作流程
在这里插入图片描述
在这里插入图片描述
AOF缓冲区的三种写回策略
配置文件Redis.conf的定义
在这里插入图片描述

1.Always
同步写回:每个写命令执行完立刻同步地将日志写回磁盘
2.everysec
每秒写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入磁盘
3.no
操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

三种写回策略小总结
在这里插入图片描述
AOF配置/启动/修复/恢复
版本6与7的AOF区别
在这里插入图片描述
开启AOF的功能
在这里插入图片描述
使用默认的写回策略,每秒钟
在这里插入图片描述
AOF保存文件的路径设置

redis 6 中AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis,conf配置文件的dir配置
在这里插入图片描述
redis 7中的设置
在这里插入图片描述
redis6 中appendonlyfile有且仅有一个
在这里插入图片描述

到了redis 7中采用了Multi Part AOF的设计,从1到3:基础文件+增量文件+清单文件
在这里插入图片描述
在这里插入图片描述
文件的定义
在这里插入图片描述
实操
1.开启AOF的功能
在这里插入图片描述
2.备份AOF相关的文件,同时删除RDB相关的文件
在这里插入图片描述
3.执行flushdb
在这里插入图片描述
4. 清空以及恢复appendonly相关的文件
在这里插入图片描述
5.重启redis服务,数据恢复
在这里插入图片描述
相关的步骤总结
在这里插入图片描述
异常恢复
在这里插入图片描述
1.故意乱写改动AOF文件

vim appendonly.aof.1.incr.aof

在这里插入图片描述
2. shutdown redis然后重启
3. 查看docker 日志
在这里插入图片描述
存在异常,需要使用指令进行修复
redis-check-aof --fix /home/run/redis/data/appendonlydir/appendonly.aof.1.incr.aof
在这里插入图片描述
AOF的优势
在这里插入图片描述
更好的保护数据不丢失、性能高、可做紧急回复
AOF的缺点
在这里插入图片描述
相同数据集的数据而言,AOF要远大于RDB文件,恢复速率慢于RDB。AOF运行效率要慢于RDB,每秒同步策略效率较好,不同步效率和rdb相同

AOF重写机制
上面AOF的缺点中,提到过AOF的文件会变得越来越大,于是AOF出现了日志重写的机制,当AOF文件的大小超过所设定的峰值的时候,redis就会自动启动AOF文件的内容压缩
在这里插入图片描述
在这里插入图片描述
一句话:启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集

相关配置
在这里插入图片描述

触发机制
自动触发:满足配置文件中的选项后,Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时
什么叫只保留可以恢复数据的最小指令集?
在这里插入图片描述
案例说明
在这里插入图片描述
关闭混合的配置
在这里插入图片描述
自动触发
在这里插入图片描述
在这里插入图片描述
故意设置大key
在这里插入图片描述
查看appendonlyfile中文件的变化,大小从51变成240
在这里插入图片描述
再循环对1个k1设置,直到达到1kb的阈值
在这里插入图片描述
达到阈值后,重写后的日志文件从1变为2
在这里插入图片描述
base.aof文件中变成了12行,只保留了最小的结果集,开启了瘦身计划
在这里插入图片描述
在这里插入图片描述
手动重写BGREWRITEAOF
在这里插入图片描述
日志文件从2变成3,人工干预,没有达到阈值
在这里插入图片描述
AOF重写结论
在这里插入图片描述
AOF重写原理

1:在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
2:与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
3:当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中
4:当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中
5:重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

AOF常用参数配置以及优化
在这里插入图片描述

RDB-AOF 混合持久化

在这里插入图片描述
可否共存,共存听谁的?AOF

在这里插入图片描述
数据恢复顺序和加载流程

在同时开启rdb和aof持久化时,重启是只会加载aof文件,不会加载rdb文件
在这里插入图片描述

怎么选,用哪个?
在这里插入图片描述

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据。
因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),留着rdb作为一个万一的手段。

RDB+AOF混合模式
在这里插入图片描述

在这里插入图片描述

1 开启混合方式设置

设置aof-use-rdb-preamble的值为 yes yes表示开启,设置为no表示禁用

2 RDB+AOF的混合方式----------> 结论:RDB镜像做全量持久化,AOF做增量持久化

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。
简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。AOF包括了RDB头部+AOF混写

在这里插入图片描述
纯缓存模式–同时关闭RDB与AOF
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984028.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网格图学习(附题单与做题思路)

文章目录 一、DFS 经典题型695. 岛屿的最大面积 二、BFS 经典题型994. 腐烂的橘子**算法选择对照表** 一、DFS 经典题型 岛屿的最大面积 LeetCode 695描述:求网格中最大的陆地连通区域面积解题:DFS 遍历所有相邻陆地,标记已访问关键点&#…

开发者社区测试报告(功能测试+性能测试)

功能测试 测试相关用例 开发者社区功能背景 在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员…

pyecharts 中设置 ​Map 图表的宽高

在 pyecharts 中设置 ​Map 图表的宽高,需要通过 InitOpts 初始化参数实现。以下是具体方法: 🎯 完整代码示例 from pyecharts import options as opts from pyecharts.charts import Map# 创建地图时设置宽高 map_chart (Map(init_optsopt…

FPGA|Verilog-SPI驱动

最近准备蓝桥杯FPGA的竞赛,因为感觉官方出的IIC的驱动代码思路非常好,写的内容非常有逻辑并且规范。也想学习一下SPI的协议,所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动,我整个人傻眼了,我只能说&#x…

python语言总结(持续更新)

本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…

NO.26十六届蓝桥杯备战|字符数组七道练习|islower|isupper|tolower|toupper|strstr(C++)

P5733 【深基6.例1】自动修正 - 洛谷 小写字母 - 32 大写字母 大写字母 32 小写字母 #include <bits/stdc.h> using namespace std;const int N 110; char a[N] { 0 };int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> a;int i 0;while (a…

笔记四:C语言中的文件和文件操作

Faye&#xff1a;只要有正确的伴奏&#xff0c;什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

&#x1f31f;前言: 在软件开发、项目管理和系统设计等领域&#xff0c;图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及&#xff0c;我们现在可以更轻松地创建各种专业图表。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&…

【OneAPI】网页截图API-V2

API简介 生成指定URL的网页截图或缩略图。 旧版本请参考&#xff1a;网页截图 V2版本新增全屏截图、带壳截图等功能&#xff0c;并修复了一些已知问题。 全屏截图&#xff1a; 支持全屏截图&#xff0c;通过设置fullscreentrue来支持全屏截图。全屏模式下&#xff0c;系统…

基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Windows Server 2022:赋能未来,打造智能高效的企业数字基座---免费下载

免费下载地址 Windows Server 2022&#xff1a;赋能未来&#xff0c;打造智能高效的企业数字基座‌ 在数字化转型的浪潮中&#xff0c;企业需要更安全、更灵活、更智能的基础设施支撑。‌Windows Server 2022‌作为微软新一代服务器操作系统&#xff0c;以革新性的技术架构和行…

支持向量简要理解

决策方程符合感知机区分理论&#xff0c;我们基于线性代数来看这满足子空间理论&#xff0c;可以获取得到超平面。 支持向量机的目标是寻找最与超平面最近的点的最大距离&#xff0c;而距离计算如上&#xff0c;符合数学上计算点到线&#xff08;面&#xff09;的距离公式。 …

USB2.0 学习(1)字段和包

目录 1 字段 1.1 包识别字段PID 1.2 地址字段 1.3帧号字段 1.4 数据字段 1.5 CRC字段 2 包 2.1令牌包 2.2帧起始包 2.3数据包 2.4SPLIT包(分割事务包) 2.5握手包 参考 USB包的构成是一个逐层的过程,首先这些串行数据按照特定的规则构成字段,字段是构成包的基本…

AI 人工智能深度解析:从基础到前沿,全面掌握未来科技

AI 人工智能深度解析&#xff1a;从基础到前沿&#xff0c;全面掌握未来科技 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 AI 人工智能深度解析…

2025-03-09 学习记录--C/C++-PTA 习题11-1 输出月份英文名

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h>char *getmonth( int n );int main() {int n;char …

【音视频 | AAC】AAC编码库faac介绍、使用步骤、例子代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一&#xff0c;那什么是AOP&#xff1f;AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白了&#xff0c;面向切面编程就是面向特定方法编程。AOP是一种思想&#xff0c;而在Spring框…

STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步

主题内容教学目的/扩展视频OLED显示屏重点课程电路原理&#xff0c;手册分析&#xff0c;驱动程序。初始化&#xff0c;清屏&#xff0c;ASCII字库&#xff0c;显示分区。调用显示函数。做带有加入图形和汉字显示的RTC时钟界面。讲字库的设计原理。 师从洋桃电子&#xff0c;杜…

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…