redis之AOF和RDB持久化

news/2024/5/3 4:31:29/文章来源:https://blog.csdn.net/wang0907/article/details/127248639

写在前面

因为redis数据是基于内存的,为了避免服务器重启或者是宕机导致数据全部丢失,提供了数据持久化机制,即AOF(Append Only File)日志和RDB快照,接下来我们分别看下。

1:AOF

1.1:AOF日志的实现

首先我们需要配置appendonly yes来打开AOF持久化,之后当我们执行完数据修改命令后,redis就会将命令记录到aof文件中,这个过程不同于MySQL的WAL机制,在写数据之前先写日志,redis是在写数据之后再写日志的,这样做的其中一个原因是可以不用对命令本身的语法进行校验了,该过程如下图:

在这里插入图片描述

如执行命令set aa bbbb则生成的aof日志如下:

*3
$3
set
$2
aa
$4
bbbb

含义如下:

*3:命令由3部分组成
$数字:代表接下来是命令的一部分,数字代表该部分的长度

通过以上信息就可以反推出命令set aa bbbb,就可以用来备份和恢复数据了。另外针对aof的写回策略提供了若干个参数来控制,接下来继续看下。

1.2:写回策略

目前redis的写回策略有三种,通过配置项appendfsync设置,如下:

Always:同步写回,使用主线程,所以会影响到主线程的性能。
Everysec:每秒写回,先将命令写到aof的缓冲区,然后其他线程每隔一秒写到aof文件。
No:操作系统控制写回,命令仅仅写道aof缓冲区,由操作系统控制写到aof文件。

对比如下表:
在这里插入图片描述

随着越来越多的命令写入到aof文件,aof文件会变得越来越大,而aof文件的不断增大可能会产生如下的问题:

1:达到了操作系统对单文件大小的限制,从而无法继续写入
2:文件增大之后数据写入的速度会变慢,影响写入性能
3:文件过大,数据恢复的速度慢

为了解决以上可能的问题,redis提供了AOF重写机制

1.3:AOF重写机制

aof重写动态图

aof重写机制的原理是多合一,即将多个命令合并成一个命令,因为对通过一个key的操作可能会存在多次,所以对同一个key操作的命令会被记录多次,但是对于恢复数据而言,只需要最终的一个数据状态就行了,所以对于数据最终的状态,只需要对其反向生成一条命令即可,这就是多合一的过程,如下图对一个list的多次操作执行重写的过程:

在这里插入图片描述

为了完成AOF重写过程,redis会fork处一个新的子进程bgrewriteaof,并将当前内存中的数据拷贝一份,然后使用当前最新的数据生成对应的命令,并写到一个新的aof文件中,这个过程就是AOF重写,可以参考下图:

在这里插入图片描述

aof重写完成后,就可以使用新的aof文件替换旧的aof文件了。

写在后面

参考文章列表:

[]

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

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

相关文章

(附源码)计算机毕业设计SSM政府项目管理平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

回顾——PCB绘制

目录 一、原理图库原理图 二、PCB库 三、PCB 一、原理图库原理图 新建工程:文件——New——Project——Name(这里复制一下)自己选择保存路径 添加文件: 保存工程:(粘贴) 绘制原理图库、原理图 侧边栏消失&…

虚拟社会、区块链和元宇宙

1986年,早期的互联网供应商Quantum Link和娱乐公司Lucasfilm Games发布了第一款MMO游戏名为:《Habitat》基于虚拟角色的社交世界,玩家可以通过300波特的调制解调器(每分钟0.08美元)和用户的Commodore 64(595美元,按今天的价格约为…

Vue 动态换肤

效果如图&#xff1a; 源代码&#xff1a; <template><div :class"[son${temp}]" class"demo3">这是四点零八分的北京<br/>一片手的海浪翻动<br/>这是四点零八分的北京<br/>一声雄伟的汽笛长鸣<br/>北京车站高大的建…

Kafka监控EFAK(Kafka-eagle)部署与踩坑详细记录

环境 阿里云服务器centoskafka 2.4.1 &#xff08;1.1以上版本都能支持&#xff0c;低版本不太清楚了&#xff09;efak 3.0.1 当前时间官网下载的最新版&#xff08;原名叫kafka-eagle&#xff09;efak官网&#xff1a;http://www.kafka-eagle.org/jdk8 部署好的UI 部署流程 …

kafka系列——安装部署,相关命令,配置文件,底层存储结构,log和index文件

点击上方“罗晓胜”&#xff0c;马上关注&#xff0c;您的支持对我帮助很大 / 前言 / Kafka是最初由Linkedin公司开发&#xff0c;用scala语言编写的&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&…

时光机特效在哪里?推荐这三个实用软件给你

现如今有一款时光穿梭机的特效软件非常热门&#xff0c;它具有让照片中的人变年轻或者变老的功能&#xff0c;能让我们看到过去以及未来自己的样子&#xff0c;也能给我们枯燥的生活增添一点趣味感。那么大家是不是已经迫不及待地想知道时光穿梭机特效滤镜在哪了呢&#xff1f;…

Linux学习 -- docker的commit命令和本地镜像到云端

commit命令本地镜像到云端 一、commit命令 我们在使用镜像新建容器后&#xff0c;容器只是具有简易的Linux的功能&#xff0c;不具备一些常用的功能&#xff0c;如vim功能&#xff0c;因此我们需要给容器加上一些我们需要的功能。 使用如下命令&#xff1a; docker commit提交容…

不使用第三方库怎么实现【前端引导页】功能?

前言 随着应用功能越来越多&#xff0c;繁多而详细的功能使用和说明文档&#xff0c;已经不能满足时代追求 快速 的需求&#xff0c;而 引导页&#xff08;或分步引导&#xff09; 本质就是 化繁为简&#xff0c;将核心功能以更简单、简短、明了的文字指引用户去使用对应的功能…

Oracle数据库 | SQL语句解析

个人主页&#xff1a;&#x1f497;wei_shuo的个人主页 &#x1f3c0; Hello World &#xff01;&#x1f3c0; 文章目录一.Oracle启动及登录1.1 服务手启动即关闭1.2 SQL* PLUS命令二. 表的创建和维护2.1 创建表2.2 修改表2.3 重命名表2.4 截断表2.5 删除表三. 数据完整性与约…

【C++学习】类与对象(中)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 类与对象&#xff08;中&#xff09;&#x1f638;构造函数&#x1f639;概念&#x1f639;特性&…

常见数据结构-散列表(上)理论

一&#xff0c;散列表理解 散列表的英文叫“Hash Table”&#xff0c;我们平时也叫它“哈希表”或者“Hash 表”&#xff0c;散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;基于数组演化而来。 散列表是通过散列函…

bp神经网络performance怎么看,BP神经网络用什么软件

1、除了MATLAB能做BP神经网络&#xff0c;还有其他什么软件能做 除了MATLAB能做BP神经网络&#xff0c;还有其他什么软件能做 理论上编程语言都可以&#xff0c;比如VB&#xff0c;C语言&#xff0c;过程也都是建模、量化、运算及结果输出&#xff08;图、表&#xff09;&…

JavaScript设计模式(一):面向对象编程 - 继承

JavaScript设计模式 - 面向对象编程灵活的语言-JavaScript用对象收编变量对象的另一种形式(函数对象)真假对象(闭包和类)一个检测类函数的祖先写的都是看到的-面向对象编程创建一个类&#xff08;三种方式&#xff09;类的属性和方法通过闭包来实现类的静态变量定义&#xff0c…

二十一、JAVA调用存储过程(Oracle专栏)

2022年9月28日16:33:11目录 &#x1f3c6;一、存储过程的创建及调用 ⭐️1.1、PLSQL编程 ⭐️1.2、程序结构 ⭐️1.3、变量 1.3.1、普通变量 1.3.2、引用型变量 1.3.3、记录型变量 ⭐️1.4、流程控制 1.4.1、条件分支 1.4.2、循环 &#x1f3c6;二、游标 ⭐️2.1、…

网状神经系统的典型特点,网状结构神经系统

脑干网状结构对肌紧张既有抑制作用也有加强作用。 选择A对。理由如下&#xff1a;网状结构中存在有抑制和加强肌紧张和肌运动区域&#xff0c;分别成为抑制区和易化区。抑制区位于网状结构的腹内侧部分。易化区位于网状结构的背外侧、脑桥被盖、中脑中央灰质及被盖。 &#x…

什么是RFID技

什么是RFID技术 RFID射频识别是一种非接触式的自动识别技术&#xff0c;它通过射频信号自动识别目标对象并获取相关数据&#xff0c;识别无需人工干预&#xff0c;可工作于各种恶劣环境。RFID技术可识别高速运动物体并同时识别多个标签&#xff0c;操作快捷方便。 ​​​​​…

Bootstrap——flex布局(定义弹性盒子、排列方向、内容排列、项目对齐、自身对齐、自动对等、等宽变换、自动边距、包裹、排序、对齐内容)

Bootstrap4与Bootstrap3最大的区别是Bootstrap 4使用弹性盒子来布局&#xff0c;而不是使用浮动来布局。弹性盒子也是CSS的一种新的布局模式&#xff0c;更适合响应式的设计。 布局的传统解决方案,基于盒状模型&#xff0c;依赖display属性 position属性 float属性。它对…

dif分页、排序、过滤功能

分页功能 接口中只有查询全部数据接口有时候数据量非常大&#xff0c;所以需要用到分页功能&#xff0c;在rest_framework中提供了三种分页的方法 一.PageNumberPagination 第一步&#xff1a;定义一个分页类继承PageNumberPagination from rest_framework.pagination import P…

Day02 -尚品汇-路由传递参数

围绕这个开展 1》在Header.vue里面 2》在Header.vue里面 第一种方式&#xff1a;&#xff08;字符串形式写法&#xff09; 传递params参数 3》在index.js里面 【此处用的是params参数 需要占位】 4》在Header.vue里面 【params写法】 1--4的效果图 我还想加一个传…