【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制

RDB 最大的问题,就是不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失


基本工作机制

AOFappend only file,类似于 MySQLbinlog,会把每个用户的每个操作,都记录到文件中。当 redis 重新启动的时候,就会读取 AOF 文件中的内容,用来恢复数据

  • 当开启 AOF 的时候,RDB 就不生效了。(启动的时候就不再读取 RDB

image.png|284

  • AOF 文件和 RDB 文件的位置一样

image.png|343

  • AOF 是一个文本文件,每次进行的操作,都会被记录到文本文件中
  • 通过一些特殊的符号作为分隔符,来对命令的细节做出区分
  • 可以看到,重启服务器之后,还有先前的数据image.png

AOF 工作流程

Redis 虽然是一个单线程的服务器,但是速度很快。为什么速度快?重要原因是其只操作内存。引入 AOF 之后,又要写内存,又要写硬盘,现在还能和之前一样快吗?

顺序写入

实际上是没有影响到 Redis 处理请求的速度:

  1. 硬盘上读写数据,顺序读写的速度是比较快的(还是比内存要慢很多),随机访问则速度是比较慢的

AOF 是每次把新的操作写入到原有文件的末尾,属于顺序写入

内存缓冲区

  1. AOF 机制并非是直接让工作线程把数据写入硬盘,而是先写入一个内存中的缓冲区(大大降低了写硬盘的次数),积累一波之后,再统一写入硬盘 image.png

写硬盘的时候,写入硬盘数据的多少,对于性能影响没有很大,但是写入硬盘的次数则影响很大

文件同步

如果把数据写入到缓冲区里,本质还是在内存中呀,万一这个时候,突然进程挂了,或者主机掉电了,怎么办?是不是缓冲区中的数据就丢了?

  • 对的,缓冲区中没来得及写入硬盘的数据是会丢的(又想… 又想…,是不行的,鱼和熊掌不可兼得)

Redis 给出了一些选项,让程序猿根据实际情况来决定怎么取舍——缓冲区的刷新策略

  • 刷新频率越高,性能影响就越大,但数据可靠性就越高
  • 刷新频率越低,性能影响就越小,但数据可靠性就越低

Redis 提供了多种 AOF 缓冲区同步⽂件策略,由参数 appendfsync 控制,不同值的含义如下图:
image.png

  • always:频率最高,数据可靠性最高,性能最低
  • everysec:频率较低,数据可靠性也会降低,性能会提高。每秒刷新一次(极端掉电情况,也只会损失 1s 的数据)(默认策略
  • no:频率最低,数据可靠性也是最低,性能最高image.png

重写机制

AOF 文件持续增长,体积越来越大,会影响到下次 Redis 启动的时间,Redis 启动的时候要读取 AOF 文件的内容

上述 AOF 中的文件,有一些是冗余的

  • 有一个客户端,对 Redis 进行操作
    • lpush key 111
    • lpush key 222
    • lpush key 333
    • 这些操作其实就是一个操作:lpush key 111 222 333
    • set key 111
    • del key
    • set key 222
    • del key
    • 这四个操作,什么都不做就可以了

Redis 启动时读取 AOF 内容的时候,AOF 记录了中间的过程,但 Redis 在重启的时候只关注最终结果。因此 Redis 就存在一个机制,能够针对 AOF 文件进行整理操作,这个整理就是能够剔除其中的冗余操作,并且合并一些操作,达到给 AOF 瘦身这样的效果——重写机制


比如,你每天给自己打分,买了个小本子记录

  • 早起:+2 分
  • 贪睡:-2 分
  • 晨跑:+5 分
  • 高效 1h:+2 分
  • 浪费时间:-3 分

  • 记录满一页后,记录一个总分,然后翻到下一页,继续记录。哪怕前面的内容都没了也没事,只要你记得每一页的最终总分是多少就行了

触发时机

  • 手动触发:调用 bgrewriteaof 命令
  • 自动触发:根据 auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage 参数确定⾃动触发时机。
    • auto-aof-rewrite-min-size:表⽰触发重写时 AOF 的最⼩⽂件⼤⼩,默认为 64MB
    • auto-aof-rewrite-percentage:代表当前 AOF 占⽤⼤⼩相⽐较上次重写时增加的⽐例。

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

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

相关文章

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划(Dynamic Programming,DP)是一种通过将复杂问题分解为重叠子问题,并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题: 最优子结构&…

数据可视化(matplotlib)-------辅助图标的设置

目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 (一)、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 (二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面: ‌边框和背景‌: ‌border‌:可以设置图片的边框样式、宽度和颜色。例如,img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框,颜色为灰色…

Redis解决缓存击穿问题——两种方法

目录 引言 解决办法 互斥锁(强一致,性能差) 逻辑过期(高可用,性能优) 设计逻辑过期时间 引言 缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这个时间点对…

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…

python实现接口自动化

代码实现自动化相关理论 代码编写脚本和工具实现脚本区别是啥? 代码&#xff1a; 优点&#xff1a;代码灵活方便缺点&#xff1a;学习成本高 工具&#xff1a; 优点&#xff1a;易上手缺点&#xff1a;灵活度低&#xff0c;有局限性。 总结&#xff1a; 功能脚本&#xff1a;工…

C++特性——RAII、智能指针

RAII 就像new一个需要delete&#xff0c;fopen之后需要fclose&#xff0c;但这样会有隐形问题&#xff08;忘记释放&#xff09;。RAII即用对象把这个过程给包起来&#xff0c;对象构造的时候&#xff0c;new或者fopen&#xff0c;析构的时候delete. 为什么需要智能指针 对于…

算法系列——有监督学习——4.支持向量机

一、概述 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种应用范围非常广泛的算法&#xff0c;既可以用于分类&#xff0c;也可以用于回归。 本文将介绍如何将线性支持向量机应用于二元分类问题&#xff0c;以间隔&#xff08;margin&#x…

网络安全之前端学习(HTML篇)

前言&#xff1a;网络安全中有一个漏洞叫xss漏洞&#xff0c;就是利用网页引发弹窗&#xff0c;这就要求我们看得懂源码&#xff0c;所以我会持续更新前端学习&#xff0c;可以不精通&#xff0c;但是一定要会&#xff0c;主要掌握HTML&#xff0c;css&#xff0c;js这三项技术…

大华HTTP协议在智联视频超融合平台中的接入方法

一. 大华HTTP协议介绍 大华HTTP协议是大华股份&#xff08;Dahua Technology&#xff09;为其安防监控设备开发的一套基于HTTP/HTTPS的通信协议&#xff0c;主要用于设备与客户端&#xff08;如PC、手机、服务器&#xff09;之间的数据交互。该协议支持设备管理、视频流获取、…

介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。

LSM 树&#xff08;Log-Structured Merge-Tree&#xff09; 核心原理&#xff1a;通过将随机写转换为顺序写优化写入性能&#xff0c;适用于写密集型场景。数据首先写入内存中的 MemTable&#xff08;有序结构&#xff0c;如跳表&#xff09;&#xff0c;当达到阈值后转为 Imm…

Powershell WSL导出导入ubuntu22.04.5子系统

导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…

Jmeter

Jmeter 官网地址 https://jmeter.apache.org/ 下载安装包 系统环境变量 变量值JMETER_HOMEG:\Application\apache-jmeter-5.6.3 修改成自己的安装目录CLASSPATH;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;Path%JMETER_HOME%\bin 中文界…

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下&#xff0c;如何让视频分享更便捷、高效&#xff0c;成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势&#xff0c;为视频分享领域带来了革命性变革。…

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…

学习笔记 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

一、小雅自带tutorial文件教程

下载压缩包 这是elegantrl的开源地址: ElegantRL 我使用的是云服务器平台&#xff0c;上传压缩包之后&#xff0c;使用Linux解压缩命令&#xff0c;将压缩包解压。 使用conda新建一个虚拟环境 conda create -n ElegantRL conda activate ElegantRL安装elegantrl包 pip ins…

海康ISAPI协议在智联视频超融合平台中的接入方法

一. 海康ISAPI协议详解 海康ISAPI协议原理 海康ISAPI&#xff08;Internet Server Application Programming Interface&#xff09;协议是海康威视设备提供的一种基于HTTP/HTTPS的高级通信协议&#xff0c;用于实现客户端与设备之间的数据交互。其核心原理包括&#xff1a; 基…

【Azure 架构师学习笔记】- Azure Databricks (22) --Autoloader

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (21) --费用相关 前言 Databricks家里在Apache Spark之上&#xff0c;是企业级的应对大规模数据处理的通用平台&#xff0c; 可以运行在AWS&a…

论文略读(2025.3.18-更新中)

关于可控视频生成 I2V3D: Controllable image-to-video generation with 3D guidance Image to Video工作&#xff0c;能够实现给一张图&#xff0c;输出一个视频&#xff0c;且可以控制相机。动态信息来自于用户手工设计&#xff08;相机移动&#xff0c;人体骨骼驱动&#x…