redis AOF机制

在这里插入图片描述
在redis运行期间,不断将redis执行的写命令写到文件中,redis重启之后,只要将这些命令重复执行一遍就可以恢复数据。因为AOF只是将少量的写命令写入AOF文件中,因此其执行效率高于RDB,开启AOF即使Redis发生故障,丢失的数据也较少。

appendonly yes
appendfilename appendonly.aof

aof重写:随着命令不断添加aof文件会越来越大,redis会进行aof的重写,每个健只会写入最后一次命令,已删除或过期的数据相关命令将抹去。

  1. AOF定时逻辑
    1. 判断是否存在AOF重写操作,若当前没有子进程则执行AOF重写操作
    2. AOF重写条件
      1. AOF文件大于server.aof_rewrite_min_size
      2. 上次AOF重写后的文件大小,当前AOF文件增加的空间大小比例已经超过了server.aof_rewrite_perc配置,此配置默认为100.例如上次重写aof大小为80MB,现在aof文件有160了,则满足重写要求。
    3. 存在延迟的AOF缓冲区刷新操作,则将数据从缓冲区刷到文件中。
    4. 每经过一段时间,执行:若上次AOF缓冲区刷新操作中写入磁盘出错,则再次刷新缓冲区
  2. AOF持久化过程
    1. 命令传播
      1. 对带EXPIRE、EXPIREAT、PEXPIRE、SETEX、PSETEX,或者带EX、PX选项的SET命令做特殊处理。因为这些命令带有过期时间,需要将这些命令转换为PEXPIREAT命令,将过期时间的时间戳写入buf暂存区。
      2. 对于其他命令将命令写入buf暂存区
      3. 若服务器开启AOF功能,则将buf暂存区内容写入AOF缓冲区
      4. 如果当前线程正在执行AOF重写操作,则还需将buf暂存区内容写入到AOF重写缓冲区
    2. 刷新AOF缓冲区
      1. 当AOF缓冲区为空时,如果刷盘策略为每秒同步,且当前存在待同步的数据,距上次同步已经过去一秒,则开始同步。否则退出。
      2. 检查后台线程是否正在执行同步操作,若存在则执行以下逻辑:若同步策略为每秒同步,则延迟AOF缓冲区刷新操作。如果已经延迟多次且延迟时间超过2秒,则强制刷新AOF缓冲区。
      3. 将AOF缓冲区内容写入文件
      4. aof缓冲区内容刷新成功后,若aof总空间小于4kb,则清空并重用aof缓冲区,否则新建一个新的缓冲区。
    3. 同步磁盘
      1. 刷盘策略:
        1. 不执行fsync,速度快的安全性低
        2. 执行fsync,安全性高速度慢
        3. 每个一秒执行fsync,折中处理
      2. 如果程序存在子进程,且开了server.aof_no_fsync_on_rewrite配置,就不同步磁盘
      3. 若刷盘策略是每次同步(2),则开始同步磁盘
      4. 若刷盘策略为每秒同步,且距上次同步已经过去一秒,则添加一个后台任务同步磁盘
  3. AOF重写
    1. aof混合持久化
      1. 若开启混合持久化,在AOF重写时,会将redis数据以RDB格式保存到新文件中,再将重写缓冲区增量写命令以aof格式写入文件。
    2. 重写过程:
      1. fork一个子进程(aof进程),负责将当前内存数据保存到一个新文件中
        1. 打开一个临时文件并初始化rio变量
        2. 若开启了aof持久化,则生成rdb文件到临时文件中,否则将redis数据转化为写入命令写入临时文件
        3. 重复从server.aof_pipe_read_data_from_parent读取增量命令:
          1. 读取时间超过一秒或者连续20毫秒没有读取到则停止
          2. 若没有读取到增量命令则阻塞一秒等待增量命令
        4. 通知主进程(父进程)停止发送增量命令
        5. 再一次从server.aof_pipe_read_data_from_parent读取增量命令
        6. 将暂存区内容写入文件并同步磁盘
        7. 重命名文件
      2. 将步骤一执行期间的增量命令写入新文件中
      3. 主进程收尾,将步骤二执行期间主进程执行的赠礼命令写入新文件中,替换新的AOF文件
        1. 打开aof进程创建的文件
        2. 将重写缓冲区内容写入临时文件
        3. 重命名文件进行替换
        4. 磁盘同步并清空server.aof_buf内容
  4. AOF文件加载
    1. 打卡aof文件
    2. 创建一个伪客户端,执行aof文件中的命令
    3. 如果文件以redis标志开头,则该aof文件是混合持久化方式生成,需调用处理RDB内容的函数加载RDB内容
    4. 处理aof文件中的命令
    5. 按照RESP协议格式,读取命令参数数量
    6. 读取每一个参数
    7. 查找命令redisCommand
    8. 调用redisCommand.proc执行命令

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

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

相关文章

前端使用miniO上传文件

项目背景:vue2&#xff0c;前提是请先安装miniO,若安装引入时报错&#xff0c;那就是版本不对&#xff0c;通常指定版本安装即可。 页面样式&#xff1a; 前端vue页面代码&#xff1a; //<el-form>表单中:<el-form-item label"文件" prop"fileIds&q…

TY6802 同步整流PCB设计注意事项

TY6802 系列是一款用于反激式电源次级同步整流芯片&#xff0c;TY6802能可靠支持包括 DCM、CCM和准谐振模式。TY6802 集成了一个 100V 功率 MOSFET&#xff08;TY6802A&#xff1a;100V15mR; TY6802B&#xff1a;100V10mR; TY6802C&#xff1a;100V7.5mR;) &#xff0c;可以取代…

API容易被攻击,如何做好API安全

随着互联网技术的飞速发展和普及&#xff0c;网络安全问题日益严峻&#xff0c;API&#xff08;应用程序接口&#xff09;已成为网络攻击的常见载体之一。API作为不同系统之间数据传输的桥梁&#xff0c;其安全性直接影响到整个系统的稳定性和数据的安全性。 根据Imperva发布的…

JavaScript(25)——BOM、延迟函数、JS执行机制

BOM BOM是浏览器对象模型 window对象是一个全局对象&#xff0c;也就是JavaScript中的顶级对象所有通过var定义的全局作用域中的变量&#xff0c;函数都会变成window对象的属性和方法window对象下的属性和方法调用的时候可以省略window 延时函数 let a setTimeout(回调函数…

OLED整体刷新到结合switch刷新方式演变

OLED整体刷新到结合switch刷新方式演变 引言 OLED刷新模式, 其实很简单, 就和prinf输出一样, 只是我们这里利用OLED来输出我们所需要的东西了。 至于OLED单独整体刷新, 还是利用switch刷新, 都是形而上学, 形的东西, 至于底层, 江协科技大佬已经帮我整理好了, 我们是站在巨人的…

【Python零基础学习】字典

文章目录 前言一、简单字典示例二、使用字典三、字典遍历四、嵌套总结 前言 Python 字典 是一种非常强大且灵活的数据结构&#xff0c;它允许你通过键&#xff08;key&#xff09;来存储和检索值&#xff08;value&#xff09;。想象一下&#xff0c;字典就像一个巨大的电话簿…

8月21日微语报,星期三,农历七月

8月21日微语报&#xff0c;星期三&#xff0c;农历七月十八&#xff0c;工作愉快&#xff0c;生活喜乐&#xff01; 一份微语报&#xff0c;众览天下事&#xff01; 1、今日出发&#xff01;中国体育代表团将分两批出征巴黎残奥会。 2、股价再创新高&#xff01;工商银行市值…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

项目实战--SpringBoot整合EasyExcel实现数据导入导出

SpringBoot整合EasyExcel实现数据导入导出 一、前言二、实践2.1 实体类注解方式2.2 动态参数化导出导入 一、前言 在公司业务系统开发过程中&#xff0c;操作 Excel 实现数据的导入导出是个非常常见的需求。 最近公司的项目采用EasyPoi来实现的&#xff0c;但是在数据量大的情…

GPT-SoVITS

文章目录 model archS1 ModelS2 model model arch S1 model: AR model–ssl tokensS2 model: VITS&#xff0c;ssl 已经是mel 长度线性相关&#xff0c;MRTE(ssl_codes_embs, text, global_mel_emb)模块&#xff0c;将文本加强相关&#xff0c;学到一个参考结果 S1 Model cla…

Linux进程间通信——SystemV消息队列与信号量

文章目录 消息队列信号量同步互斥原语、原子性信号量多线程并发访问锁 消息队列 SystemV除了共享内存之外&#xff0c;还有一个进程间通信的方式&#xff0c;是消息队列 我们说一切进程间通信的方式本质其实就是让不同进程看到同一份资源 这个消息队列的本质其实就是让两个进…

十二步:像玩游戏一样搞量化,量化交易不是“黑神话”

十二步&#xff1a;像玩游戏一样搞量化&#xff0c;量化交易不是“黑神话” 1、定义您的目标2、数据收集和清理3、构思4、模型开发5、回测6、风险管理7、交易成本分析 (TCA)8、模拟交易9、优化10、执行11、监控和维护12、记录和审查结论 《黑神话&#xff1a;悟空》今日上线了&…

OSPF-基础多区域实验

1.ENSP下载 阿里云盘分享 ⭐/*无需密钥 免费下载 安装不成功&#xff0c;可关注并私信博主*/ 2.OSPF的基础需求和规则 实验规则&#xff1a; 1.接口地址→XY.XY.XY.R /24 X:两者之间最小的 Y:两者之间最大的 R:谁的接口就是谁的编号 以R1和R2之间的连接为例&#xff0…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(中)

目录 一.Nginx版本和安装方式:源码编译安装 1.验证版本及编译参数 2.使用安装完成的二进制文件nginx 3.Nginx 启动文件 二.平滑升级和回滚 三.全局配置 实现 nginx 的高并发配置 四.核心配置&#xff1a;新建一个 PC web 站点 五.核心配置&#xff1a;location的详细使用…

GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹

0序&#xff1a; 在大疆遥控器或者司空2中设置航线&#xff0c;都是一个个的航点&#xff0c;如果把航点转为航线&#xff0c;在三维地球中显示其空间效果。用于分析和实际物体的距离&#xff0c;或者展示该航线都做了哪些方面的考虑。 如何把一堆点连城一条线&#xff1f; 本…

Kali Linux 命令大全

一、引言 Kali Linux 作为一款专为渗透测试和安全研究设计的操作系统&#xff0c;拥有丰富的命令行工具&#xff0c;熟练掌握这些命令对于高效地进行安全测试和分析至关重要。本文将为您详细介绍 Kali Linux 中常用的命令&#xff0c;涵盖系统信息获取、文件操作、网络分析、用…

如何轻松有效地将 Windows 10 电脑迁移到 SSD

您想将 Windows 10 迁移到新硬盘驱动器吗&#xff1f;在专业第三方应用程序的帮助下&#xff0c;它可以简单有效地完成。这篇文章将为读者提供有关如何将 Windows 10 迁移到 SSD 的详细指南。 Windows 10 电脑系统迁移到 SSD 的四个原因 Windows 10 克隆到 SSD 意味着将设备上…

【C++】————智能指针

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年8月20日 一&#xff0c;什么是智能指针 在C中没有垃圾回收机制&#xff0c;必须自己释放分配的内存&#xff0c;否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针&…

标准版v5.4安卓手机小程序扫码核销读取不到核销码的问题

修改这个文件&#xff0c;红色的那块代码替换成绿色的这段代码&#xff0c;然后重新打包上传。 文件地址&#xff1a;template/uni-app/pages/admin/order_cancellation/index.vue let path decodeURIComponent(res.path); self.verify_code path.split(‘code’)[1]; h5…

使用Element UI组件时,icon图标不显示

问题描述&#xff1a; 我在使用Element UI组件的日期选择器时&#xff0c;发现图标不显示(左边是原图&#xff0c;右边的问题图)。 经过检查我发现&#xff0c;我的JS&#xff0c;CSS文件都没有问题&#xff0c;只是缺少了element-icons.tff和element-icons.woff这两个文件。 …