Redis中的AOF重写到底是怎么一回事

首先我们知道AOF和RDB都是Redis持久化的方法。RDB是Redis DB,一种二进制数据格式,这样就是相当于全量保存数据快照了。AOF则是保存命令,然后恢复的时候重放命令。

AOF随着时间推移,会越来越大,因为不断往里追加命令。所以需要重写。重写解决了什么呢?就是删去了一些没用的指令,比如有一条SET a 100,然后后面又有一条SET a 200,那前一条指令就是没用的,只保留后面的即可。重写就是重新生成AOF操作命令记录的过程,还会顺带缩短重放时间。

AOF重写流程

一处拷贝

fork一个子进程,和主进程共享Redis物理内存,把这些内存里的数据写入新的AOF文件

两处缓冲

重写时候要是有新的写入命令,主进程会把他们写入到两个缓冲里——AOF缓冲和AOF重写缓冲。前者是为了给旧AOF文件,保证重写过程宕机了也能根据旧的AOF文件恢复。后者是为了给新的AOF文件,重写拷贝完内存区数据后将这部分增量数据一并写入新AOF文件。

这里很多人都有一个误区,重写时候是根据旧AOF命令来的,实际上并不是!!!
AOF重写触发后,会fork一个子进程,子进程遍历当前Redis DB中所有数据,然后再以字符串命令的形式写入新AOF文件中。等这一步执行完了后,再将AOF重写缓存区里的增量数据追加进新的AOF文件里。

全程没有拷贝AOF缓存区,也和旧AOF文件没关系!!!

混合持久化

这是对AOF重写的一个优化(redis5之后的默认方式),即将当前的数据以RDB形式写进新的AOF文件,追加的重写缓冲区数据正常写进新的AOF文件,二者共同构成新AOF文件来替代掉旧AOF文件。这样有效降低了AOF文件的体积,并且从数据恢复角度上也变快了。

值得注意的是混合持久化仍然是AOF而非RDB和AOF双开,数据恢复过程如下:
在这里插入图片描述

MP-AOF

MP-AOF是redis7提出来的,因为混合持久化还是有不足的,因为本质上还是没解决一些问题。

不足

主进程要写两个缓冲,aof重写缓冲和aof缓冲,这是两个重复的操作,浪费CPU和内存。同时父进程在AOF重写缓冲里的数据是通过管道传递给子进程的,然后子进程再将其追加写入AOF,这也会造成CPU的额外开销。两个相同的缓冲的内容还得写到新旧日志里,是额外的磁盘开销(因为新日志替换旧日志前还是需要刷盘的)

做法

全程Multi-Part AOF,就是将AOF拆分为Base AOF和Incr AOF了。Base AOF是fork子进程那一刻的RDB快照(redis5就默认开启混合持久化了,redis7自然也是开启了。假设关闭的话这里还是保存的命令)。Incr AOF是重写过程中,主进程写AOF缓冲区的指令。然后有一个Manifest文件,会记录当前最新的Base AOF和Incr AOF是哪个文件,旧的会被标记然后异步删除(UNLINK)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s(2)

目录 一.二进制部署k8s 常见的K8S安装部署方式: k8s部署 二进制与高可用的区别 二.部署k8s 初始化操作: 每台node安装docker: 在 master01 节点上操作; 准备cfssl证书生成工具:: 执行脚本文件: 拉入etcd压缩包…

【前端素材】推荐优质后台管理系统inspina平台模板(附源码)

一、需求分析 后台管理系统是一个集成了多种功能模块的系统,通过这些模块的协同工作,实现对网站、应用程序或系统的全面管理和控制。管理员通过后台管理系统可以高效地管理用户、内容、数据、权限等方面的工作,确保系统的正常运行和安全性。…

软件压力测试:测试方法与步骤详解

随着软件应用的不断发展,用户对系统性能的要求也逐渐提高。在不同的负载条件下,系统必须能够保持稳定、高效的运行。软件压力测试是一种验证系统在各种负载情况下性能表现的关键手段。本文将详细探讨软件压力测试的方法和步骤。 1. 明确测试目标 在进行压…

error: src refspec main does not match any解决办法

一、问题描述: 用GitHub Actions自动部署Hexo,到了最关键的一步;突然报错:error: src refspec main does not match any 1、错误一: main分支应填写为master分支;但是只改这里也会报其他错误 2、错误二&a…

关于运行flutter app 运行到模拟器出现异常提示

Exception: Gradle task assembleDebug failed with exit code 1 解决方案: 1.讲当前文件的distributionUrl值改为 https://mirrors.cloud.tencent.com/gradle/gradle-7.4-all.zip

C++模板从入门到入土

1. 泛型编程 如果我们需要实现一个不同类型的交换函数,如果是学的C语言,你要交换哪些类型,不同的类型就需要重新写一个来实现,所以这是很麻烦的,虽然可以cv一下,有了模板就可以减轻负担。 下面写一个适…

【C深剖】typedef关键字

简介:本系列博客为C深度解剖系列内容,以某个点为中心进行相关详细拓展 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

Photoshop 2023(Ps)下载安装及详细安装教程

Photoshop(Ps)的介绍 Adobe Photoshop,简称“PS”,是由AdobeSystems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑和创造工作。PS有很多功能,在图像、…

贷齐乐系统最新版SQL注入(无需登录绕过WAF可union select跨表查询)

一、环境 已上传资源(daiqile) 二、代码解释 1.1Request 不管get请求还是post请求都可以接收到 1.2过滤的还挺多 1.3第二个WAF把数据分为两个了一个Key一个value,全是explode的功劳 1.4submit是if进入的前提 很明显走进来了 1.5那我们在这…

【Python笔记-设计模式】装饰器模式

一、说明 装饰器模式是一种结构型设计模式,旨在动态的给一个对象添加额外的职责。 (一) 解决问题 不改变原有对象结构的情况下,动态地给对象添加新的功能或职责,实现透明地对对象进行功能的扩展。 (二) 使用场景 如果用继承来扩展对象行…

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框 问题: 由于el-select组件的el-select-dropdown部分是自动插入在最外层Body上的,所以在当前组件的scoped中让el-select-dropdown组件display:none不会生效所以需要: :popper-…

网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)

这个错误通常表现为"403 Forbidden"或"HTTP Status 403",它指的是访问资源被服务器理解但拒绝授权。换句话说,服务器可以理解你请求看到的页面,但它拒绝给你权限。 也就是说很可能测试给定的参数有问题,后端…

Excel图表 - 条形图误差线组合

首先为了方便展示,我们将元素种类列进行一下汇总显示 1、在AB列之间插入一列,输入函数IF(A2A1,“”,A2),这样我们就可以把同类名称的只显示一个名称,方便后续图表展示 2、选中BCD列插入一个条形图 3、然后加3列辅助列&#xff…

一种基于动态水位值的Flink调度优化算法(flink1.5以前),等同于实现flink的Credit-based反压原理

优化flink反压 说明1 flink反压介绍1.1 介绍1.2 大数据系统反压现状1.4 flink task与task之间的反压1.5 netty水位机制作用分析 2 反压优化算法3 重点! 但是 可但是 flink1.5以后的反压过程。4 flink反压问题的查找瓶颈办法 说明 首先说明,偶然看了个论…

电脑录屏软件哪个好用?实测告诉你答案(2024年最新)

在当今信息化快速发展的时代,无论是录制在线课程、游戏操作,还是制作教程、会议记录,一款电脑录屏软件显得尤为重要,可是电脑录屏软件哪个好用呢?本文将介绍三款主流的电脑录屏软件,通过分步骤详细讲述&…

(提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战

文章目录 (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、提示词Prompt优化本地知识库目标操作步骤问答测试的预设问题原始数据情况数据集优化:预处理,先后准备了三份数据…

CMD命令大全

CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) appwiz.cpl:程序和功能calc:启动计算器certmgr.msc:证书管理实用程序charmap&#xff1a…

stable diffusion官方版本复现

踩了一些坑,来记录下 环境 CentOS Linux release 7.5.1804 (Core) 服务器RTX 3090 复现流程 按照Stable Diffusion的readme下载模型权重、我下载的是stable-diffusion-v1-4 版本的 1 因为服务器没法上huggingface,所以得把权重下载到本地&#xff…

[HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

【鸿蒙 HarmonyOS 4.0】ArkTS开发语言

一、背景 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 二、基本语法 2.1、基本语法介绍 ArkTS的基本组成,资料来自…