Redis 数据持久化之AOF

news2025/3/10 8:27:27

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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【芯片验证】verificationguide上的74道SystemVerilog面试题

诧异啊,像我这种没事在网上各处捡东西吃的人为什么之前一直没有用过verificationguide这个网站呢?总不能是大家都已经看过就留下我不知道吧。前几天在论坛上和朋友谈论验证面试题时才搜到这个网站的,感觉挺有意思: .: Verification Guide :.​verificationguide.com/https…

Java后端高频面经——计算机网络

TCP/IP四层模型?输入一个网址后发生了什么,以百度为例?(美团) (1)四层模型 应用层:支持 HTTP、SMTP 等最终用户进程传输层:处理主机到主机的通信(TCP、UDP&am…

面试题(二)--Object中的常见方法

Object Java的Object是所有Java类的父类,所有的Java类直接或者间接的继承了Object类,Object类位于java.lang包中(编译时自动导入),主要提供了11种方法。 /*** native 方法,用于返回当前运行时对象的 Class…

运行OpenManus项目(使用Conda)

部署本项目需要具备一定的基础:Linux基础、需要安装好Anaconda/Miniforge(Python可以不装好,直接新建虚拟环境的时候装好即可),如果不装Anaconda或者Miniforge,只装过Python,需要确保Python是3.…

设备管理系统功能与.NET+VUE(IVIEW)技术实现

在现代工业和商业环境中,设备管理系统(Equipment Management System,简称EMS)是确保设备高效运行和维护的关键工具。本文采用多租户设计的设备管理系统,基于.NET后端和VUE前端(使用IVIEW UI框架&#xff09…

数据类设计_图片类设计之2_无规则图类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇数据类设计_图片类设计之1_矩阵类设计(前端架构基础)-CSDN博客,讨论非规则图类型的设计 无规则图的简单定义 前面的矩阵类,有明显的特征:长,宽,行和…

aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)

文章目录 aws(学习笔记第三十二课) 深入使用cdk学习内容:1. 使用aws API Gatewaylambda1.1. 以前的练习1.2. 使用cdk创建API Gateway lambda1.3. 确认cdk创建API Gateway lambda 2. 使用event bridge练习producer和consumer2.1. 代码链接2.2. 开始练习2.3. 代码部…

计算机视觉算法实战——老虎个体识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域介绍 老虎个体识别是计算机视觉中的一个重要应用领域,旨在通过分析老虎的独特条纹图案,自动识别和区…

Qt添加MySql数据库驱动

文章目录 一. 安装MySql二.编译mysql动态链接库 Qt版本:5.14.2 MySql版本:8.0.41 一. 安装MySql 参考这里进行安装:https://blog.csdn.net/qq_30150579/article/details/146042922 将mysql安装目录里的bin,include和lib拷贝出来…

蓝桥杯备考:图论初解

1:图的定义 我们学了线性表和树的结构,那什么是图呢? 线性表是一个串一个是一对一的结构 树是一对多的,每个结点可以有多个孩子,但只能有一个父亲 而我们今天学的图!就是多对多的结构了 V表示的是图的顶点集…

【每日学点HarmonyOS Next知识】输入框自动获取焦点、JS桥实现方式、Popup设置全屏蒙版、鼠标事件适配、Web跨域

1、HarmonyOS TextInput或TextArea如何自动获取焦点? 可以使用 focusControl.requestFocus 对需要获取焦点的组件设置焦点,具体可以参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attribut…

网络空间安全(19)CSRF攻防

一、简介 跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络攻击方式。攻击者通过诱导受害者访问恶意页面,利用受害者在被攻击网站已经获取的注册凭证(如Cookie),绕过后台的用户验证…

DEV C++安装

点击----我接受 点击--下一步 选择安装路径: D盘安装选择路径: 点击----安装等待安装完成点击---完成即可 一路下一步即可

ESP32驱动OV3660摄像头实现物体轮廓识别(摄像头支持红外夜视、边缘AI计算)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 ESP32-S3 AI智能摄像头模块是一款专为智能家居和物联网应用打造的高性能边缘AI开发模组。它集成了摄像头、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化AI推理。 凭借TensorFlow Lite、YOLO和O…

深入探讨 Docker 层次结构及其备份策略20250309

深入探讨 Docker 层次结构及其备份策略 本文将深入探讨 Docker 层次结构 以及在 不同场景下应选择哪种备份方式。通过本文的介绍,您将对如何高效地管理和迁移 Docker 容器有更深的理解。 📌 什么是 Docker 层次结构? Docker 镜像采用了 分…

游戏引擎学习第145天

仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前,我们正在完成遗留的工作。当时我们已经将声音混合器(sound mixer)集成到了 SIMD 中,但由于一个小插曲,没有及时完成循环内部的部分。这个小插曲主要是…

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内,添加一个element-plus的自定义插槽, 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话,请关注本博主~~

NoteGen是一款开源跨平台的 AI 笔记应用,专注于 recording 和 writing ,基于 Tauri 开发

一、软件介绍 文末提供程序和源码下载 NoteGen 是一款专注于记录和写作的跨平台 AI 笔记应用,基于 Tauri 开发。NoteGen 的核心理念是将记录、写作和 AI 结合使用,三者相辅相成。记录功能可以帮助用户快速捕捉和整理碎片化知识。整理功能是连接记录和写…

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道(easy)思路及AC代码 第二道(easy)思路及AC代码solution 1solution 2 第三道(mid)思路及AC代码(mid) 第一道(easy) 题目链接 思路及…

个人学习编程(3-06) 搜索

树的高度&#xff1a; 题目&#xff1a; PS G:\vscodetest> .\ab.exe 5 5 1 2 1 4 1 5 2 3 3 #include <stdio.h> #include <vector> #include <queue> using namespace std; int main() {int n,m;scanf("%d %d",&n,&m);vector<vec…