REDIS03_AOF概述、工作流程、写回策略、正常异常流程、重写机制、配置文件详解

news2024/12/23 22:22:22

文章目录

  • ①. AOF - 概述作用
  • ②. AOF - 工作流程
  • ③. 缓冲区 - 写回策略
  • ④. 配置文件说明(6 VS 7)
  • ⑤. 正常、异常恢复
  • ⑥. AOF - 优劣势
  • ⑦. AOF - 重写机制
  • ⑧. AOF优化配置项详解
  • ⑨. RBD和AOF共存模式

①. AOF - 概述作用

  • ①. 官网介绍
    在这里插入图片描述

  • ②. 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

  • ③. 默认情况下,redis是没有开启AOF(append only file)
    开启AOF功能需要设置配置:appendonly yes - Aof保存的是appendonly.aof文件

②. AOF - 工作流程

  • ①. Client作为命令的来源,会有多个源头以及源源不断的请求命令

  • ②. 在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作

  • ③. AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件

  • ④. 随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的

  • ⑤. 当Redis Server 服务器重启的时候会从AOF文件载入数据。
    在这里插入图片描述

③. 缓冲区 - 写回策略

  • ①. 配置文件位置:
    在这里插入图片描述

  • ②. Always:同步写回,每个写命令执行完立刻同步地将日志写回磁盘

  • ③. everysec: 每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入磁盘

  • ④. no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

在这里插入图片描述

④. 配置文件说明(6 VS 7)

  • ①. 如何开启aof
    在这里插入图片描述

  • ②. 使用默认写回策略,每秒钟

# appendfsync always
appendfsync everysec
# appendfsync no
  • ③. aof文件-保存路径
  1. redis6 - AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis.conf配置文件的dir配置
  2. redis7之后最新:dir + appenddirname
    在这里插入图片描述在这里插入图片描述
  • ④. aof文件-保存名称,redis6只有一个
    在这里插入图片描述
  • ⑤. Redis7.0 Multi Part AOF的设计
  1. base:表示基础AOF,它一般由子进程通过重写产生,该文件最多只有一个
  2. incr:表示增量AOF,它一般会在AOFRW开始执行时被创建,该文件可能存在多个
  3. manifest清单文件,用来管理aof的
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

⑤. 正常、异常恢复

  • ①. 启动:修改默认的appendonly no,改为yes

  • ②. 写操作继续,生成aof文件到指定的目录
    在这里插入图片描述

  • ③. 恢复1:重启redis然后重新加载,结果OK

  • ④. 恢复2:将生产的aof文件重命名,重启发现redis中无数据,将重命名的文件重新改为aof文件,重启发现redis有数据产生

  1. 写入数据进redis,然后flushdb+shutdown服务器
  2. 新生成了dump和aof
  3. 备份新生成的aof.bak,然后删除dump/aof再看恢复
  4. 重启redis然后重新加载试试?
  5. 停止服务器,拿出我们的备份修改后再重新启动服务器看看
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • ⑤. 异常恢复
  1. 故意乱写正常的AOF文件,模拟网络闪断文件写error
    vim /myredis/appendonlydir/appendonly.aof.1.incr.aof
  2. 重启Redis之后就会进行AOF文件的载入,发现启动都不行
  3. 异常修复命令:redis-check-aof --fix 进行修复
  4. 重新OK
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

⑥. AOF - 优劣势

  • ①. 优势:更好的保护数据不丢失 、性能高、可做紧急恢复
    在这里插入图片描述

  • ②. 劣势

  1. 相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
  2. aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
    在这里插入图片描述

⑦. AOF - 重写机制

  • ①. 启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集
  1. 由于AOF持久化是Redis不断将写命令记录到AOF文件中,随着Redis不断的进行,AOF的文件会越来越大,文件越大,占用服务器内存越大以及AOF恢复要求时间越长
  2. 为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集
  3. 可以手动使用命令bgrewriteaof来重新
  • ②. 触发机制 - 官网默认配置:同时满足,且的关系才会触发
  1. 根据上次重写后的aof大小,判断当前aof大小是不是增长了1倍
  2. 重写时满足的文件大小
    在这里插入图片描述
  • ③. 自动触发:满足配置文件中的选项后,Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时

  • ④. 手动触发:客户端向服务器发送bgrewriteaof命令
    在这里插入图片描述

  • ⑤. 启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集 - 如何理解这句话

  • ⑥. 案例验证:

  1. 前期配置准备,开启aof
  2. 重写峰值修改为1k:auto-aof-rewrite-min-size 1k
  3. 删除之前的全部aof和rdb,清除干扰项在这里插入图片描述
  • ⑦. 自动触发案例01
  1. 完成上述正确配置,重启redis服务器,执行set k1 v1查看aof文件是否正常
  2. 查看三大配置文件
  3. k1不停1111111暴涨
  4. 重写触发
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

⑧. AOF优化配置项详解

在这里插入图片描述

⑨. RBD和AOF共存模式

  • ①. rdb和aof可以共存,数据恢复顺序和加载流程
    在这里插入图片描述

  • ②. 如何选择?

  1. RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  2. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾
  • ③. 同时开启两种持久化方式
  1. 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
  2. RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
    作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),留着rdb作为一个万一的手段
  • ④. 推荐方式:RDB+AOF混合方式
  1. 设置aof-use-rdb-preamble的值为yes,yes表示开启,设置为no表示禁用
  2. RDB+AOF的混合方式,结论:RDB镜像做全量持久化,AOF做增量持久化
  3. 先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录
  • ⑤. 纯缓存模式:同时关闭RDB+AOF
  1. 禁用rdb:save “”(禁用rdb持久化模式下,我们仍然可以使用命令save、bgsave生成rdb文件)
  2. 禁用aof:appendonly no(禁用aof持久化模式下,我们仍然可以使用命令bgrewriteaof生成aof文件)

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

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

相关文章

解决RabbitMQ的The channelMax limit is reached. Try later.

The channelMax limit is reached. Try later.顾名思义就是channel达到数量限制 查看源码得出 大概意思就是: 默认最大通道数;2047,因为它在服务器端是第2048个,每个连接用于协商和错误通信。 也可以在rabbitmq的管控台看出 总结…

单页面与路由

目录 (一)什么是SPA应用? (二)路由 (1)什么是路由? (2)路由的分类 (3)路由的安装和使用 (三)、路由的使…

微服务 - 搭建Consul集群服务,Consul配置中心

传统配置文件的弊端 静态化配置,例如env文件配置文件无法区分环境配置文件过于分散历史版本无法查看 配置中心如何解决的呢?配置中心的思路是把项目中的配置参数全部放在一个集中的地方来管理,并提供一套标准的接口,当各个服务需要获取配置…

d2l 使用attention的seq2seq

这一章节与前面写好的function关联太大,建议看书P291. 这章节主要讲述了添加attention的seq2seq,且只在decoder里面添加,所以全文都在讲这个decoter 目录 1.训练 2.预测 1.训练 #save class AttentionDecoder(d2l.Decoder):"""带有注…

HTTP与HTTPS相关介绍(详细)

HTTP与HTTPS相关介绍 HTTP与HTTPS简述HTTPS和HTTP的区别主要如下HTTPS的工作原理前言工作步骤总结 HTTPS的缺点SSL与TLSSSL:TLS:TLS和SSL的关系 对称加密与非对称加密对称加密非对称加密 HTTP与HTTPS简述 超文本传输协议(Hyper Text [Transf…

如何无侵入地引入第三方组件?

做java开发的小伙伴都知道,java的生态比较繁荣,有各种各样的第三方组件来满足我们日常的开发需求。很多常用的中间件(redis,kafka等)都提供java的开发接口,而且这些接口通常会被封装成比较好用的组件来满足我们使用这些中间件的场…

SpringBoot集成MyBatis-yml自动化配置原理详解

SpringBoot集成MyBatis-yml自动化配置原理详解 简介:spring boot整合mybatis开发web系统目前来说是市面上主流的框架,每个Java程序和springboot mybatis相处的时间可谓是比和自己女朋友相处的时间都多,但是springboot mybatis并没有得到你的真…

RabbitMQ--详情概述

一、消息队列(Rabbit Message Queue) 1、概念 消息队列是一种应用之间的通信方式,消息发送之后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只发布消息到MQ,消息使用者值从MQ中拿消息,两者不知道对方的存在。 简…

Sentinel——限流规则

目录 快速入门 簇点链路 案例 流控模式 流控模式——关联 流控模式——链路 案例 流控效果 流控效果——warm-up 流控效果——排队等待 热点参数限流 快速入门 簇点链路 簇点链路:就是项目内的调用链路,链路中被监控的每个接口就是一个资源。…

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

[前端基础]异步操作(还没写完)

1.写在前面 这篇是因为最近再写异步操作,需要点总结 因为还在学习前端的过程中嘛,所以有些东西可能会慢慢补充上来,也可能会有很多个人理解不是很到位的地方,还望各位评论区佬能帮忙指出.阿里嘎多捏 2.异步操作的概念和举例 异步操作和同步操作在408的三门课程中,都有所提及…

基于php的校园垃圾分类网站的设计与实现

摘要 近年来,随着民众环保意识的增强和资源有效利用问题的重视,全国各地市不断推进垃圾分类工作。教育部,也已于去年发布通知在全国各学校推进垃圾分类工作,以鼓励垃圾分类的有效实施。但现阶段我国校园的垃圾分类践行情况依旧问…

STATS 782 - Control Flow and Functions

文章目录 一、Control Flow1. If-Then-Else2. Loops 二、Functions1. Defining Functions2. 使用函数计算数学公式 总结 一、Control Flow 1. If-Then-Else > if (x > 0) y sqrt(x) else y -sqrt(-x)或 > y if (x > 0) sqrt(x) else -sqrt(-x)2. Loops ① fo…

数组应该怎么用?

文章目录 前言一、数组是什么?二、数组的创建1.数组的创建:2.数组的初始化 三.数组的遍历1.逐个打印2.使用for循环四.二维数组1.语法:2.遍历 五.数组的一些常用方法1.数组转换字符串2.数组拷贝3.二分查找4.冒泡排序5.数组逆序 总结 前言 为什…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

_awt_container容器_演示

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置,大小。…

基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 目录 1 ACO-BP算法 2 ACO-BP算法基本思路 3 具体步骤 4 运行结果 ​ 5 参考文献 6 Matlab代码实现 1 ACO-BP算法 传统的…

数组模拟实现单链表快速操作

前言:我们都知道链表的一般模式是由结构体加指针来实现的,但是在实际的比赛中,结构体指针来实现链表的操作并不常用,原因是因为我们在增加节点时需要开辟新的内存,而比赛时给出的样例大多都是十几万个数据,…

安装配置SVN版本控制管理工具

SVN工具能帮我们做什么? 核心功能:文档版本管理系统 适合对象:个人与团队都可以使用,企业中项目资源的重要管理工具 举例:一个文件夹里面的文档管理 1.下载安装SVN服务器 VisualSVN-Server 2.下载安装SVN客户端 T…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库,不需要魔法,点击这里注册 🚀贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法: 基于代价滤波的方法可以在c…