Redis的持久化(新)

news2025/1/23 16:55:31

        Redis中数据都保存在内存,但是内存中的数据变换很快,也很容易丢失,比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)AOF(Append Only File)

1.RDB

        RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁盘中,也是默认的持久化的方式,利用数据快照,使用的是写时复制技术,将数据以二进制的格式保存在磁盘。

1.1触发快照的时机(save)

1.1.1手动触发

手动触发分别对应save和bgsave命令:

  • save命令:阻塞当前Redis服务,去做持久化操作,直到RDB持久化过程完成为止,不推荐使用。

  • bgsave命令:redis进程执行fork操作创建子进程,子进程负责RDB持久化,完成后子进程自动结束,而且原进程的阻塞只发生在fork阶段。

1.1.2自动触发

        利用save进行相关配置,我们进入到redis.conf文件中,其中Save m n就表示若在m秒里面至少进行了n次数据更改时会自动执行bgsave

        我们将需要持久化的数据写入磁盘中保存,磁盘中的文件名为dump.rdb,和bin在同一个目录,redis启动时,就是读取dump.rdb文件将数据加载进内存中的。文件的名字可在redis.conf文件里面进行修改。

 注意

  1. 如果只开启了rdb,通过shutdown save命令断开Redis的连接时,也会自动执行bgsave。

  2. 在调试级别(debug)中重新启动Redis时,不会清空内存中的数据,这意味着原有的RDB文件仍然有效,即使未执行保存操作。

  3. 当Redis执行全量复制(主从复制)时,如果没有执行save或bgsave命令并且没有添加配置策略,主节点会自动生成RDB文件,并传输给从节点进行数据同步。

1.2RDB持久化和数据恢复的完整流程(bgsave)

        当需要进行持久化时,Redis会单独创建一个子进程来完成持久化操作,这个子进程中所有的数据都和原进程保持一致,而且是一个全新的进程,也会占用内存,这个操作也称为Fork

        此时原进程不进行任何操作,由其子进程完成数据的持久化,子进程会先将快照数据写入到一个临时的文件,等到数据写完了之后,再用这个临时的文件直接替换磁盘上的dump.rdb文件即可。

        但是缺点是如果子进程正在将数据写入临时文件,此时突然宕机,无法将临时文件替换dump.rdb,下次启动后,恢复后的内存数据较与宕机之前相比就会丢失一部分。

        发现整个过程中,原进程是不进行任何IO操作的,这就确保了极高的性能。

1.3RDB方式的优劣分析

1.3.1优点
  • 恢复数据速度快。

  • 节省磁盘空间(二进制格式存储)。

1.3.2缺点
  • fork的时候,会占用内存空间。

  • 可能会丢失数据,不适用于数据一致性高的场景。

2.AOF

日志的形式来记录每个更改的操作,不会记录读的操作,只允许追加而不允许改写。在redis重启或启动之初会读取该文件然后重新构建Redis数据库的数据,这样也不用害怕内存数据的丢失了。

AOF方式Redis默认是不开启的,如果要开启则需要在配置文件中修改,若AOF和RDB同时开启,系统默认选择用AOF来恢复数据,AOF在磁盘中保存的日志文件是"appendonly.aof",文件的路径和RDB一致。

2.1AOF同步频率策略

  • appendsync always :表示每次的修改都会立刻记入磁盘日志文件,性能较差但是能保证数据的一致性。

  • appendsync everysec (默认) :每一秒执行一次数据同步,但可能会在临界点丢失数据。

  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统。

2.2Rewrite压缩

因为AOF采用的是追加写入的方式,为了避免磁盘AOF文件越来越大,新增了重写机制,当文件默认达到128MB时,Redis就会自动进行AOF文件的内容压缩,保留能达到最终结果的最小指令集。

2.2.1重写的整体流程梳理(自动的)
  1. 主进程fork一个子进程去执行重写的操作,主进程正常运行不会阻塞。

  2. 主进程执行的写操作要同时写入AOF缓冲区和AOF_rewrite缓冲区,此时子进程遍历内存数据将自己压缩的指令集先存储到临时文件(新AOF文件),之后向主进程发送信号。

    注意:这里AOF缓冲区是否要根据同步策略将数据同步到磁盘AOF文件中?

    可以进行设置。如果同步,那么数据安全一致性,但是性能会比较低。如果不同步,若此时宕机,会造成数据丢失,但是性能比较高。

  3. 主进程把AOF_rewrite缓冲区中的数据写入到临时文件中。

  4. 使用临时文件(新AOF文件)覆盖旧的AOF文件,完成AOF重写。

2.3AOF持久化和数据恢复的完整流程

  1. 写操作命令先会被追加写入到AOF缓冲区内。

  2. AOF缓冲区根据同步频率策略将缓冲区数据同步到磁盘AOF文件中。

  3. 看磁盘AOF文件大小是否超过阈值,判断要不要rewrite重写。

  4. 如果Redis宕机,重启服务时,会加载AOF文件来进行数据恢复。

2.4AOF文件出现损坏

        如遇到AOF文件损坏,通过.........../bin/redis-check-aof--fix appendonly.aof进行恢复。恢复后重启Redis服务即可。

2.5AOF方式的优劣分析

2.4.1优点
  • 备份机制更加的稳健,丢失数据概率更低。

  • 可读的日志文件。

2.4.2缺点
  • 相比RDB占用更多的磁盘空间。

  • 恢复数据相比RDB更慢。

  • 如果每次写操作都同步,对性能要求较高。

  • AOF文件可能出现损坏,需要手动修复。

                

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

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

相关文章

static和extern

1.extern extern 是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使⽤ extern 进⾏声明,然后使⽤。 即在一个源文件中想要使用另一个源文件,即可通过这个extern来声明使用。 2.st…

NC65 修改元数据字段长度

NC65 修改元数据字段长度,执行下面sql,执行完后需要重启NC服务才生效。 --属性 update md_property set attrlength 200 where name fphm and classidece96dd8-bdf8-4db3-a112-9d2f636d388f ;--列 update md_column set columnlength 200 where tab…

Java的判空

校验List 在进行参数非空校验时,我们总是容易直接就对任何的东西都来一个! null 其实这样并不完全正确,对list类型来说 不等于null和list.size ! 0是不一样的。 不等于null是指已经声明了list的存在,并且在堆内存中有了引用。 …

ROS设置DHCP option121

配置时,了解格式很关键,16进制填写格式如下: 将要访问的IPV4地址:192.168.100.0/24 192.168.30.254 转换为:掩码 目标网段 网关 0x18c0a864c0a81efe,0不用填写 ROS配置如下图: 抓…

【Qt开发流程】之富文本处理

描述 Scribe框架提供了一组类,用于读取和操作结构化的富文本文档。与Qt中以前的富文本支持不同,新的类集中在QTextDocument类上,而不是原始文本信息。这使开发者能够创建和修改结构化的富文本文档,而不必准备中间标记格式的内容。…

修改 OkHttp3 的超时时间

修改 OkHttp3 的超时时间 一. 前言二. 导入mavengradle 三. 设置超时时间 一. 前言 OkHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司开发。OkHttp3是Java和Android都能用,Android还有一个著名网络库叫Volley,那个…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

Web自动化测试流程:从入门到精通,帮你成为测试专家!

Web应用程序在今天的软件开发中占据着越来越重要的地位。保证Web应用程序的质量和稳定性是非常必要的&#xff0c;而自动化测试是一种有效的方法。本文将介绍Web自动化测试流程&#xff0c;并提供代码示例。 步骤一&#xff1a;选取测试工具 选择适合自己团队的自动化测试工具…

UML建模图文详解教程——用例图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 用例图概述 用例图(use case diagram)是表示一个系统…

【数据结构】链表中二级指针的应用

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 (注:为方便演示本篇使用的x86系统,因此指针的大小为4个字节) 目录 &#x1f4cc;形参的改变不影响实参! 1.调用函数更改整型时传值调用与传址调用的区别 &#x1f38f;传值…

【Pytorch】Visualization of Fature Maps(2)

学习参考来自 使用CNN在MNIST上实现简单的攻击样本https://github.com/wmn7/ML_Practice/blob/master/2019_06_03/CNN_MNIST%E5%8F%AF%E8%A7%86%E5%8C%96.ipynb 文章目录 在 MNIST 上实现简单的攻击样本1 训练一个数字分类网络2 控制输出的概率, 看输入是什么3 让正确的图片分…

表格制作软件排行榜,热门做表格的软件推荐

在数字化时代&#xff0c;表格不仅仅是企业管理和数据整理的重要工具&#xff0c;更是学术研究、项目规划以及日常生活中必不可少的一部分。为了更高效地进行表格制作&#xff0c;选择一款优秀的表格制作软件是至关重要的。在众多的软件中&#xff0c;我们特别推荐一款备受好评…

【电路笔记】-电流源

电流源 文章目录 电流源1、概述1.1 理想电流源1.2 实际电流源1.3 连接规则 2、依赖电流2.1 压控电流源2.2 电流控制电流源 3、总结 本文为前面文章 电压源的延续&#xff0c;我们将在本文介绍电流源。 与电压源的情况类似&#xff0c;我们将首先介绍理想电流源的概念&#xff…

基于springboot实现摄影跟拍预定管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现摄影跟拍预定管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

【Redis】持久化-RDBAOF混合持久化

文章目录 前置知识RDB&#xff08;定期备份&#xff09;触发机制流程说明RDB文件的处理RDB 的优缺点 AOF&#xff08;实时备份&#xff09;使用AOF命令写入AOF工作流程文件同步重写机制重写触发机制AOF进制重写流程 混合持久化启动时数据恢复 总结 前置知识 回顾MySQL MySQL的事…

UVM项目笔记——通过寄存器模型实现AHB接口的寄存器读写(内含源码)

目录 1.前言 2.DRIVER实现 2.1 AHB二级流水时序 2.2 “队列错位法”实现driver 2.3 driver代码 2.4 仿真log与波形 2.5 多级流水拓展方法 1.前言 UVM driver在接口协议的实现中起着非常重要的作用&#xff0c;因为它一端处理基于类的事务级sequence&#xff0c;另一端处…

Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问

Wagtail-基于Python Django的内容管理系统CMS实现公网访问 文章目录 Wagtail-基于Python Django的内容管理系统CMS实现公网访问前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个…

数字化转型过程中的RPA+X与RPA+B

当前&#xff0c;RPA已成为企业数字转型初始阶段里最受欢迎的自动化解决方案&#xff0c;越来越多的企业开始引入RPA来协助员工&#xff0c;开展各类业务场景的自动化应用。很多企业也都将RPA列为重要流程优化技术&#xff0c;不少公司甚至直接放弃了传统的IT自动化方案&#x…

晶振有哪几种?晶振旁边的两个电容起什么作用?

晶振可以分为普通晶振、温补晶振、压控晶振、恒温晶振、差分晶振。 普通晶振通常用作微处理器的时钟器件&#xff0c;主要应用于那些稳定度要求不要的设备中&#xff0c;例如电视机、微波炉。 温补晶振&#xff0c;在晶振内部采取了对晶体频率、温度特性进行补偿&#xff0c;已…

sap系统连接其它系统

本文来自博客园&#xff0c;作者&#xff1a;Lovemywx2&#xff0c;转载请注明原文链接&#xff1a;https://www.cnblogs.com/1187163927ch/p/8669859.html JAVA连接ORACLE数据库 1&#xff0c;首先需要在Oracle安装完成之后新建一个用户 --新建用户 create user chenh iden…