AOF是什么?

news2024/11/29 9:00:08

目录

一、AOF是什么?

二、使用AOF

三、命令写入

四、重写机制

4.1 触发AOF

4.2 AOF执行流程


一、AOF是什么?

AOF是Append Only File,是Redis中实现持久化的一种方式。以独⽴⽇志的⽅式记录每次命令,重启时再重新执⾏ AOF ⽂件中的命令达到恢复数据的⽬的。AOF 的主要作⽤是解决了数据持久化的实时性,⽬前已经是 Redis 持久化的主流⽅式。

二、使用AOF

开启 AOF 功能需要设置配置:appendonly yes,默认不开启。AOF ⽂件名通过 appendfilename配置(默认是appendonly.aof)设置。保存⽬录同 RDB 持久化⽅式⼀致,通过 dir 配置指定。AOF 的⼯作流程操作:命令写⼊(append)、⽂件同步(sync)、⽂件重写(rewrite)、重启加载(load),如图所示

配置完之后需要重启Redis,然后就会发现有了aof的文件了

 

  1. AOF的执行方式不是直接将数据写入AOF文件中的,而是将所有的命令数据写入到一个aof_buf的缓冲区中,这个缓冲区是在内存中的。
  2. AOF缓冲区会根据对应的刷新策略向硬盘做同步操作
  3. 随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的
  4. 当Redis重启时可以通过加载AOF文件进行数据恢复

三、命令写入

 对Redis执行操作,观察aof文件中存储的都是命令语句,并且是以特殊字符来分隔的

AOF是将用户输入的命令直接追加到缓冲区中的,以特定的字符分隔开。那么为什么要写入缓冲区而不是直接写入AOF文件呢?

数据每次写入AOF文件中是直接同步硬盘的,多次同步硬盘会增加IO次数,但是一次同步的过程中数据量多是不会对性能有很大的影响的。所以就有了这种先将数据写入缓存中,然后再由缓存一次将数据都写入AOF文件中的方式来减少IO的次数。

但是,如果写入缓冲区的数据长时间不同步到AOF文件中的话就会造成数据丢失的风险,所以Redis也提供了多种缓冲区的的同步策略,让用户根据自己的需求做出合理的调整。

  • always:只要命令写入缓冲区就立刻同步到AOF文件中
  • everysec(everysecond):每秒将缓冲区的命令同步一次到AOF文件中(Redis默认)

        

  • no:不执行任何同步策略,由操作系统自行安排

四、重写机制

随着AOF文件中不断有命令写入,文件也会越来越大,为了解决这个问题,Redis引入了AOF重写机制来压缩文件的体积。AOF文件重写就是把Redis进程内的数据转化为写命令同步到新的AOF文件中。为什么重写可以使得AOF文件变小呢?

由于AOF文件中是存储Redis命令的,其中不乏有很多重复的命令,例如以下几种,都是对同一个key进行操作,最后的结果应该是 key = 3333 就行了,但是在AOF文件中存储的却是所有的命令,久而久之肯定就会造成文件空间过度浪费。所以这里就有了重写的机制

4.1 触发AOF

  • bgrewriteaof (手动输命令触发)

           创建一个子线程,在子线程中进行重写,最后将重写的AOF文件替换原有的文件

  • 自动触发

        根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定⾃动触发时机。

        auto-aof-rewrite-percentage:代表当前 AOF 占⽤⼤⼩相⽐较上次重写时增加的⽐例

        auto-aof-rewrite-min-size:表⽰触发重写时 AOF 的最⼩⽂件⼤⼩,默认为64MB。

        

4.2 AOF执行流程

AOF的执行流程相比于RDB来说是差不多的,只是多了一个实时性。这里可能有的同学就会问了,既然是一样的那我还要RDB干嘛?并不是所有的场景都需要实时存储,可能有些场景就需要RDB的定时存储。所以特定的场景选用特定的技术才是最合适的

1. 首先执行AOF重写请求,如果当前进程正在执⾏ AOF 重写,请求不执⾏。如果当前进程

    正在执⾏ bgsave 操作,重写命令延迟到 bgsave 完成之后再执⾏

2. 父进程阻塞等待(很快单位以微秒记)执行fork,创建出子进程

3. 重写

        3.1 当父进程fork之后,继续响应其他命令。所有修改操作写⼊ AOF 缓冲区并根据               appendfsync策略同步到硬盘,保证旧 AOF ⽂件机制正确

        3.2 ⼦进程只有 fork 之前的所有内存信息,⽗进程中需要将 fork 之后这段时间的修改

              操作写⼊ AOF 重写缓冲区中

4. ⼦进程根据内存快照,将命令合并到新的 AOF ⽂件中(这里就是压缩后的文件)

5. 子进程完成重写

        5.1 新⽂件写⼊后,⼦进程发送信号给⽗进程

        5.2 父进程将AOF重写缓存区内临时保存的新命令追加到新AOF文件中

        5.3 用新的AOF文件替换旧的的AOF文件

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

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

相关文章

创邻科技亮相ISWC 2023,国际舞台见证知识图谱领域研究突破

近日,第22届国际语义网大会 ISWC 2023 在雅典希腊召开,通过线上线下的形式,聚集了全球的顶级研究人员、从业人员和行业专家,讨论、发展和塑造语义网和知识图谱技术的未来。创邻科技CEO张晨博士作为知识图谱行业专家受邀参会&#…

SystemVerilog学习(8)——包的使用

目录 一、包的定义 二、导出包的内容 1、可以通过域的索引符::号直接引用 2、可以指定索引一些需要的包中定义的类型到指定的容器中 3、通过通配符*来将包中所有的类别导入到指定容器中 三、包的使用 在进行本文的学习之前,首先需要对SV中类相关的内容有充分的认识…

PCL 提取点云边界轮廓-AC方法、平面轮廓

一、概述 PCL点云边界特征检测 (附完整代码 C)_pcl计算点云特征值_McQueen_LT的博客-CSDN博客 在点云的边界特征检测(网格模型的边界特征检测已经是一个确定性问题了,见 网格模型边界检测)方面,PCL中有一…

智慧城市大脑数据中台解决方案:PPT全套37页,附下载

关键词:智慧城市大脑解决方案,数据中台解决方案,智慧城市建设,数据中台建设,智慧城市大脑建设,数据中台建设架构 一、智慧城市大脑数据中台建设背景 智慧城市大脑数据中台是一个面向城市级数据管理、开发和…

双剑合璧:基于Elasticsearch的两路召回语义检索系统,实现关键字与语义的高效精准匹配

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

传递函数的推导和理解

传递函数的推导和理解 假设有一个线性系统,在一般情况下,它的激励 x ( t ) x(t) x(t)与响应 y ( t ) y(t) y(t)所满足的的关系,可用下列微分方程来表示: a n y ( n ) a n − 1 y ( n − 1 ) a n − 2 y ( n − 2 ) ⋯ a 1 y…

1分钟精准预测未来10天天气,谷歌开源GraphCast

11月15日,谷歌旗下著名AI研究机构Deepmind在官网宣布,开源天气大模型GraphCast,并公布了论文。 据悉,GraphCast可以在1分钟内,精准预测而来全球10天的天气情况,同时可以提前预警大暴雨、大风雪、洪水、高温…

【Linux网络】搭建内外网的网关服务器,实现DNS分离解析与DHCP自动分配

一、实验要求: 二、实验思路剖析: 网关服务器: 客户端准备: 实操: 第一步先安装dhcp服务和bind服务 第二步双网卡,配置网卡的ip地址 第三步:开始配置dhcp 第四步:做dns分离解析…

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性,可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…

吉利银河L6顶配 官方OTA升级降低充电速度

互联网是有记忆的 你宣传充电口 卖出去又更新降低速度 属于诈骗 吉利新车上市两个月官降1w,希望大家引以为戒,可以买,但是刚出别着急做韭菜

AE 的软件、硬件、驱动控制、调试策略(没有算法)

#灵感# AE是个值得推敲再推敲的模块,有意思。 目录 相关的硬件-光圈: 相关的软件-曝光-ISO: ISP中的sensor AE 组成: sensor AE的流程及控制: tuning时AE的一些策略: 相关的硬件-光圈: 光…

网络安全(大厂面试真题集)

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…

t-product的matlab实现

t-product是一个比较好的概念,相对应于矩阵中的乘法。 定义如下 这里的 circ(A),MatVec(b) 的定义分别如下 这么定义的原因是为了映射到FFT域里面去,简化计算。 上面的一段摘录说明:直接按照定义来计算,会耗费大量的计算资源。因…

【2.5w字吐血总结 | 新手必看】全网最详细MySQL笔记

写在前面 鉴于全网MySQL知识点的总结分散难懂、良莠不齐,为了避免初学者少走弯路,更好更快地掌握MySQL知识,博主特地将自己所学的笔记分享出来。 如果想深度理解掌握MySQL,欢迎订阅专栏:MySQL进阶之路【秋说】&#…

adguarg通过dns代理全局过滤广告,全系统操作指南

路由器dns配置 安卓(鸿蒙) 设置>>其他网络与连接>>私人DNS(不同手机系统设置名称会有些许出入,但是大差不差) (左图鸿蒙):将域名m.centos.chat填入手机私人DNS IOS系统 将代理服务器IP&am…

delphi电子处方流转(医院)

【delphi电子处方流转(医院)】支持 就诊登记、电子处方上传预核验、处方处方医保电子签名、电子处方上传、电子处方撤销、电子处方信息查询、电子处方审核结果查询、电子处方取药结果查询、电子处方药品目录查询等功能。

UE4动作游戏实例RPG Action解析四:装备系统

导语: 以加血道具为例,详细分析拆解ActionRPG的装备系统,包含装备系统需求和数据结构设计,以及实现 一、装备系统需求: 装备槽: 已获取装备和未获取装备: 当已经装备一个道具时,再次捡到道具,会把道具放在装备库,不会放在装备槽中, 当没有装备道具时,会拾取道具…

Digicert证书:您的网络安全守护神

在当今数字化的世界中,网络安全已经成为每一个企业和个人必须面对的问题。而Digicert品牌证书,就是您网络安全的最佳选择。它不仅具有强大的安全性和稳定性,还能广泛应用于各种场景,为您提供全方位的保护。 首先,我们要…

Xrdp+内网穿透实现远程访问Linux Kali桌面

XrdpCpolar实现远程访问Linux Kali桌面 文章目录 XrdpCpolar实现远程访问Linux Kali桌面前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于…

【硬核】把一个MOS管制作成开关电路

你要是想读懂这篇文章,请先去了解MOS管的基础知识,本文是在基础之上做出的一部分扩展,可能有一点点深,请各位同学注意。 本文带你了解MOS管的开通/关断原理,使用PMOS做上管、NMOS做下管都是比较方便,使用PM…