Redis持久化(AOF和RDB)

目录

前言

一.RDB

1.1手动执行

1.2自动执行

二.AOF 

2.1重写机制

三.混合持久化

Redis的学习专栏:http://t.csdnimg.cn/a8cvV

前言

        持久化,在之前,我们接触这个词汇是在mysql数据库当中的事务四大特性里。

持久性:指一旦事务提交,其结果就应该是永久性的,即使系统发生故障,已经提交的事务对数据库的修改也不应该丢失。数据库系统通常通过将事务的操作持久化到非易失性存储设备(如硬盘)来保证持久性。

但是持久性和持久化也是一样的。但是有没有思考过,Redis是一个 内存 数据库,效率巨快,但数据存储在内存当中,如何持久呢? 

为了将数据持久化,Redis还在硬盘当中存储数据,硬盘数据和内存数据在理论上是一致的!

Redis实现持久化的两种方式:

  1. RDB: 定期备份,替换。
  2. AOF: 实时备份,追加模式。

一.RDB

        Redis服务器的数据定期将快照的形式保存到磁盘上。RDB是Redis的一种备份机制,主要用于数据持久化和恢复。后续Redis如果重启,可以根据快照,将数据恢复!

RDB的执行方式:

1.1手动执行

        通过Redis客户端,执行特定的命令,触发快照生成。

  • save(),执行该方法,redis会开始阻塞redis的其他客户端的命令,全力以赴的进行快照生成操作dump.rdb文件生成数据,往!不建议该方法
  • bgsave(),不会影响redis处理其他客户端请求,默默执行! 

解析:服务器发出BGSAVE()命令,然后如果已经有此命令执行,则会返回,若无,将父进程中 fork出一个子进程来执行快照的生成工作,该子进程会复制父进程的所有内存段,包括代码段、数据段和堆栈段,然后拥有一个新的进程ID。

复制技术:写时复制(copy-on-write)技术,也就是指:子进程会和父进程共享进程的数据,直到需要修改时,才进行 物理内存 的复制!

父子进程的返回值:在fork()函数调用返回后,父进程和子进程会分别从fork()函数返回,父进程得到子进程的进程ID,而子进程得到0作为返回值。

快照(RDB文件):生成的文件存储在redis的工作目录下,redis配置文件中有生成的约定。dump.rdb文件。每次生成新的RDB文件就会替换旧的文件,可借助stat命令观察

RDB文件当中的数据压缩后以二进制格式存储的,这使得它在保存和加载时非常高效,尤其是在处理大型Redis数据库时。

1.2自动执行

在Redis的配置文件当中,本就设置,Redis重启自动、每间隔多久时间修改!redis配置文件中有生成的约定。dump.rdb文件。每次生成新的RDB文件就会替换旧的文件

注:重启是正常重启,而不是杀进程!

二.AOF 

        AOF(Append-Only File),即Redis中的追加写文件。它是Redis用于持久化数据的一种方式。由于默认是关闭的,所以在Redis.conf 配置文件需要进行修改开启,并且开启之后,RDB文件就失效了,启动不会再读取RDB文件了。

如上图,手动开启将No改为Yes。将文件存储在appendonly.aof当中。

疑问:这种情况,边将数据写入内存边写入硬盘当中,这种情况会不会影响处理数据的速度呢?

答:不会,AOF机制,并不是直接将数据写入硬盘,而是先写入一个内存的缓冲区,积累之后,再统一写入硬盘当中;并且硬盘读写数据,是顺序读写速度比较快!

问:假设在缓冲区当中,突然进程挂了,数据还在吗?

答:不在了,会丢失!

 缓冲区的刷新策略:

刷新频率高,性能影响越大,可靠性越高;与之相反;默认:everysec


 AOF文件不断增长导致文件变得很大,可能会导致以下几个问题:

  1. 磁盘空间消耗过快

    • AOF文件的增大会占用更多的磁盘空间,如果不及时处理,可能会导致磁盘空间不足的问题,影响服务器的正常运行。
  2. 写入性能下降

    • 随着AOF文件的增大,写入操作需要不断追加到文件末尾,这可能会导致写入性能逐渐下降。特别是在文件变得非常大时,每次写入需要扫描更多的数据,导致延迟增加。
  3. AOF重写延迟

    • 如果AOF文件过大,进行AOF重写操作可能会消耗大量时间和系统资源,可能导致重写操作的延迟,这会影响到服务器的性能和可用性。
  4. 文件读取效率下降

    • AOF文件过大时,Redis在启动时需要读取整个AOF文件并重新执行其中的命令,以恢复数据到内存中。文件越大,读取和恢复的时间也会变长,导致启动时间延长。
  5. 备份和恢复困难

    • 大型AOF文件可能增加了备份和恢复的复杂性和时间消耗。特别是在进行故障恢复或迁移Redis实例时,处理大型AOF文件会更加耗时和复杂。

解决以上方法,redis有重写机制

2.1重写机制

        重写机制分手动触发和自动触发

手动触发:调用bgrewriteaof命令

解析:Redis在后台开始执行AOF重写操作。创建子进程,子进程会生成一个新的AOF文件,其中包含重建数据集所需的最小命令集合,父进程会仍然不断接收客户端的数据,并且写入旧的aof文件里,直到这次请求的数据结束,通过信号 通知父进程,然后新的请求数据会放入aof_rewrite_buf缓冲区当中,然后写入新的aof文件里。

三.混合持久化

        顾名思义,混合持久化就是将AOF和ROB一起使用,不过通过一些特殊使用方式,AOF是首先的存在!

配置方法如下

  1. 编辑Redis配置文件

    • 找到并编辑Redis的配置文件(通常是redis.conf)。
  2. 启用 AOF 持久化

    • 设置 appendonly yes,这样Redis会启用AOF持久化功能。
  3. 配置 RDB 持久化

    • 配置Redis定期将内存快照保存到磁盘的策略。可以通过设置 save 选项来定义触发RDB快照保存的条件

  4. 保存配置文件并关闭Redis配置文件。


写入数据具体流程:  

  1. 写入操作

    • 当Redis接收到写入操作(例如SET、HSET等)时,首先将该操作追加到AOF缓冲区中,同时更新内存中的数据。
  2. AOF持久化

    • 根据AOF配置的条件(例如根据数据量或时间间隔),AOF缓冲区中的内容将定期或达到一定大小时,被写入到AOF文件中。
  3. RDB快照

    • 根据RDB配置的条件,Redis会定期(或在手动触发时)将当前内存中的数据生成一个RDB快照,并保存到磁盘上。
  4. 故障恢复

    • 当Redis因某种故障(例如服务器崩溃或断电)而重启时,根据启用的持久化方式进行恢复:
      • 如果使用AOF,Redis会通过重新执行AOF文件中的命令来恢复数据状态。
      • 如果使用RDB,Redis会加载最近保存的RDB快照来快速恢复数据。
  5. 数据一致性保证

    • 使用AOF和RDB的组合,可以在数据恢复时结合AOF的完整性和RDB的快速性,从而提供更可靠的数据保护和恢复机制。

疑问:

如果bgrewriteaof命令和bgsave()先后抵达Redis的服务器呢?

处理顺序:Redis的事件处理器会根据命令到达的顺序,将它们添加到处理队列中,然后依次处理。

同时抵达:Redis 的 bgsave()bgrewriteaof 命令都会创建子进程来执行,而这些子进程的执行是并行执行。

额外学习--信号

        信号是linux的一种用于进程间通信的机制,用来通知进程发生了特定事件。例如上述的父子进程!!!

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

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

相关文章

Linux网络编程之UDP

文章目录 Linux网络编程之UDP1、端口号2、端口号和进程ID的区别3、重新认识网络通讯过程4、UDP协议的简单认识5、网络字节序6、socket编程接口6.1、socket常见接口6.2、sockaddr通用地址结构 7、简单的UDP网络程序7.1、服务器响应程序7.2、服务器执行命令行7.3、服务器英语单词…

vue学习笔记(十)——Vuex(状态管理,组件间共享数据)

1. vuex基础-介绍 1.1 为什么会有Vuex ? 在现代 Web 开发复杂多变的需求驱动之下,组件化开发已然成为了事实上的标准。然而大多数场景下的组件都并不是独立存在的,而是相互协作共同构成了一个复杂的业务功能。 组件间的通信成为了必不可少的开发需求。…

《Linux运维总结:基于ARM64架构CPU使用docker-compose一键离线部署单机版tendis2.4.2》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面对不同的客户部署业务系统&#xff0…

数学建模——快递包裹装箱优化问题(2023年长三角数学建模A题问题一、问题二)

快递包裹装箱优化问题 2022 年,中国一年的包 裹已经超过1000 亿件,占据了全球快递事务量的一半以上。近几年,中国每年新增包裹数量相当于美国整个国家一年的包裹数量,十年前中国还是物流成本最昂贵的国家,当前中国已经…

【IC前端虚拟项目】sanity_case的编写与通包测试

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 在花了大力气完成reference model之后,整个验证环境的搭建就完成了,再多看一下这个结构然后就可以进行sanity_case和通包测试: 关于sanity_case和通包测试我在很多篇文章中说过好多次了在这里就不赘述…

el-menu弹出菜单样式不生效

1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…

华为od 100问 持续分享6-入职体检

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

Linux驱动开发-05APP和驱动的交互方式

一、传输数据 APP和驱动: copy_to_usercopy_from_user驱动和硬件: 各个子系统的函数通过ioremap映射寄存器地址后,直接访问寄存器二、APP使用驱动的四种方式 驱动程序:提供能力,不提供策略 非阻塞(查询)(应用程序访问底层驱动时(read、write时),驱动没有数据不等待,…

基于 CNN(二维卷积Conv2D)+LSTM 实现股票多变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

单机、集群、分布式服务器比较:

1. 单机服务器的瓶颈&#xff1a; 单机服务器&#xff1a;一台服务器独立运行一个工程所需的全部的业务模块 受限于服务器硬件资源&#xff0c;所承受用户并发量受限&#xff0c;32位linux操作系统最大并发量为两万任一模块的变动和修改&#xff0c;都会导致整个项目代码重新编…

PHP上门按摩专业版防东郊到家系统源码小程序

&#x1f486;‍♀️【尊享级体验】上门按摩专业版&#xff0c;告别东郊到家&#xff0c;解锁全新放松秘籍&#xff01;&#x1f3e0;✨ &#x1f525;【开篇安利&#xff0c;告别传统束缚】&#x1f525; 亲们&#xff0c;是不是厌倦了忙碌生活中的疲惫感&#xff1f;想要享…

从微软发iPhone,聊聊企业设备管理

今天讲个上周的旧闻&#xff0c;微软给员工免费发iPhone。其实上周就有很多朋友私信问我&#xff0c;在知乎上邀请我回答相关话题&#xff0c;今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身&#xff0c;而是更想聊聊事件的主要原因——微软企业设备管理&#xff0…

利用AI与数据分析优化招聘决策

一、引言 在竞争激烈的职场环境中&#xff0c;招聘是组织获取人才、实现战略目标的关键环节。然而&#xff0c;传统的招聘方式往往依赖人力资源部门的主观经验和直觉&#xff0c;难以准确预测招聘效果&#xff0c;评估招聘渠道的效率。随着人工智能&#xff08;AI&#xff09;…

CSPVD 智慧工地安全帽安全背心检测开发包

CSPVD SDK适用于为各种智慧工地应用增加安全防护穿戴合规的检测能力&#xff0c;能够有效检测未戴安全帽和未穿 安全背心的人员&#xff0c;提供Web API和原生API。官方下载&#xff1a;CSPVD工地安全防护检测 1、目录组织 CSPVD开发包的目录组织说明如下&#xff1a; xlpr_…

linux进程——状态——linux与一般操作系统的状态

前言&#xff1a;博主在之前的文章已经讲解了PCB里面的pid——主要讲解了父子进程PID&#xff0c; 以及fork的相关内容。 本节进入PCB的下一个成员——状态&#xff0c; 状态是用来表示一个进程在内存中的状态的&#xff0c; 进程在内存中肯能处于各种状态&#xff0c; 比如运行…

云原生系列 - Jenkins

Jenkins Jenkins&#xff0c;原名 Hudson&#xff0c;2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站&#xff08;英文&#xff09;&#xff1a;https://www.jenkins.io/ 官方网站&#xff08;中文&#xff09;&#xff1a;https://www.jenkins.io…

【Linux】汇总TCP网络连接状态命令

输入命令&#xff1a; netstat -na | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} 显示&#xff1a; 让我们逐步解析这个命令&#xff1a; netstat -na: netstat 是一个用于显示网络连接、路由表、接口统计等信息的命令。 -n 选项表示输出地址和端口以数字格式显示…

贝锐蒲公英远程运维方案:即装即用、无需专线,断网也可远程维护

目前&#xff0c;公路、隧道、桥梁、航道&#xff0c;甚至是施工现场和工业生产环境等&#xff0c;都采用了实时监测方案。 通过部署各类传感器和摄像头等设备&#xff0c;现场视频画面和控制单元&#xff08;如PLC、工控机等&#xff09;数据可以实时回传&#xff0c;用于集中…

AI批量剪辑,批量发布大模型矩阵系统搭建开发

目录 前言 一、AI矩阵系统功能 二、AI批量剪辑可以解决什么问题&#xff1f; 总结&#xff1a; 前言 基于ai生成或剪辑视频的原理&#xff0c;利用ai将原视频进行混剪&#xff0c;生成新的视频素材。ai会将剪辑好的视频加上标题&#xff0c;批量发布到各个自媒体账号上。这…

Android车载MCU控制音量和ARM控制音量的区别和优缺点—TEF6686 FM/AM芯片

不要嫌前进的慢&#xff0c;只要一直在前进就好 文章目录 前言一、系统架构图1.MCU控制音量的架构图&#xff08;老方法&#xff09;2.ARM控制音量的架构图&#xff08;新方法&#xff09; 二、为啥控制音量不是用AudioManager而是执着去直接控制TDA7729&#xff1f;三、MCU控制…