【Redis】理论进阶篇------Redis的持久化

news2024/11/25 12:39:16

一、前言

     前面学习了Redis的相关的十大数据类型以及用SpringBoot集成我们的Redis的工具代码的书写。从这篇文章开始,就会从Redis相关的一些理论(也是面试和工作的热点知识)如:Redis的持久化、Redis的订阅发布模型、Redis集群环境搭建、哨兵模式等等方面介绍Redis相关的进阶知识。希望对各位小伙伴能有所帮助。

二、Redis的持久化

1、为什么会有Redis的持久化

首先Redis是我们的缓存,是一种内存数据库,如果我们存储数据的时候,不将数据库状态储存到磁盘中,那么服务器一旦宕机、进程出现错误。服务器中的数据也会随之消失。所以为Redis提供持久化的功能是必不可少的!

2、Redis的持久化是什么

官网原话:

上面是官方对Redis持久化做出的解释,我们不难看出Redis的持久化就是将数据写入磁盘。而其中的关键操作其实是RDB与AOF。接下来会其详细展开介绍。

3、RDB

1、什么是RDB

Redis Database用官网的话说就是:在指定的时间间隔内将内存中数据集快照(Snapshot  像照相机那样咔嚓一下)写入磁盘,如果要恢复数据集则将快照文件读取到内存中。

工作流程:redis中会有一个父进程,正常的处理client发出的各种请求,此时如果要触发RDB生成RDB文件,则可以通过配置文件修改触发的操作我们称为自动触发、或则通过save和bgsave指令来手动触发来实现数据备份。此时父进程就会产生(fork)一个子进程来实现持久化,会先将数据写入一个临时文件中,待持久化结束后,再用这个临时文件代替上次持久化好的文件(rdb保存的文件就是一个dump.rdb文件)。整个过程主进程不进行 任何IO操作,确保了极高的性能。

2、RDB的触发

①RDB的自动触发

首先我们找到我们Redis下载的文件目录,我们找到以.conf结束的文件:

打开这个文件找到我们的快照Snapshot 

正如Redis的配置文件所示 save <seconds> <changes>,当我们的时间间隔大于等于设置的seconds,修改次数大于等于changes时,Redis会自动触发RDB,生成对应的dump.rdb文件。

②RDB的手动触发

既然有自动触发,为什么需要手动触发呢。因为自动触发是规定操作内生成dump.rdb文件,但是如果有非常重要的数据需要及时存储,但是又不满足自动触发的需求。这时Redis官方,就为我们提供了save和bgsave两种手动触发的操作来 生成RDB文件。

a.save指令

用户可以通过执行SAVE命令,要求Redis服务器以同步方式创建出一个记录了服务器当前所有数据库数据的RDB文件。而且再持久化完成save指令的整个期间内,Redis都不能处理 其他的命令。SAVE命令是一个无参数命令,它在创建RDB文件成功时将返回OK作为结果。(注:线上禁止使用,不推荐)

b.bgsave

Redis会在后台异步进行拍照操作,不阻塞快照同时还可以响应客户端的请求,该持久化化会fork一个子进程,由子进程复制持久化的过程(父进程与子进程各做各的,会不干扰)。

③总结rdb文件的触发

1:通过我们的各种触发操作,会自动触发rdb规则;

2:除了以上,执行flushdb/flushall命令,也会触发rdb规则(为了保证数据的完整性,但是文件里面是空白的);

3:退出redis,也会产生rdb文件。

4:主从复制时,主节点自动触发。

3、RDB的恢复

从以下方面恢复数据

①:只需将rdb文件放在我们Redis的启动目录下,redis启动时候会自动检查dump.rdb文件恢复其数据;

②:物理恢复,一定服务和备份分机隔离。(PS:不可以把备份dump.rdb文件和产生redis的服务器放在同一台机器,必须分开存储,以防生产机物理损坏后备份文件也挂了)

4、AOF

1、什么是AOF

Append Only File用通俗的话来讲:以日志的形式来记录每个写操作,将Redis执行的所以写操作指令记录下来(读操作不记录)。当重启Redis的时候会将新的持久化的日志文件中的数据恢复。

Redis中AOF的操作流程:

①:Client作为命令的操作者,会在redis中不断书写各种指令命令;

②:Redis并不会直接将这些指令命令直接写入AOF文件,而是先写在一个临时的AOF文件中(其实是一个缓冲区)。当这个临时文件的数量足够多时,再写入磁盘,避免了频繁的IO操作;

③:AOF的临时文件会根据三种写回策略(后面解释)将命令写入磁盘上的AOF文件中;

④:当AOF文件中的内容越来越多时,会执行AOF重写,起到AOF文件压缩的目的。

⑤:当Redis重启的时候会将AOF中的数据重新载入。

2、AOF中的常见配置指令

我们像RDB一样,找到AOF的配置文件,介绍相关指令:

1:appendonly no 

默认不开启,我们需要手动进行配置,将"no"->"yes"

2:appendfilename "appendonly.aof"

表示修改的生成的aof文件的名称

3:三种回写策略机制

appendfsync always:同步回写,优:可靠性高,数据基本不丢失;缺:是一个极端,每个命令都要写到磁盘,性能影响大。
appendfsync everysec:每秒回写,优:性能适中;缺:宕机时,丢失一秒类数据。(Redis默认)
appendfsync no:OS控制的回写,优:新能好;缺:也是一个极端,宕机时,丢失数据数据较多。

4:AOF文件重写规则

首先aof默认文件无限追加,这样文件就会越来越大。

同时满足以下的关系,才会触发AOF的重写:

auto-aof-rewrite-percentage 100:根据上次重写后的aof大小,判断当前aof是不是增长了一倍
auto-aof-rewrite-min-size 64mb:如果aof文件大于64M,fork一个子进程来将我们文件进行重写

三、RDB与AOF的各自优缺点

1、RDB

优:

①:适合大规模的数据恢复

②:可以按照业务定时备份

③:对数据完整性和一致性要求不高

④:RDB文件在内存中加载速度比AOF快的多

缺:

①:在一定时间内做一次备份,如果redis出现宕机的话,就会丢失从当前开始的最近一次快照期间的数据

②:内存数据的全量同步,数据量太大,会大量使用IO,影响服务器性能

③:fork子进程的时候,会占用一定空间,需要考虑内存空间的问题

2、AOF

优:

①更好的保护数据不丢失、性能高、可做紧急恢复

缺:

①:在相同数据集下,aof文件要远大于rdb文件,恢复速度慢 

②:aof的效率慢于rdb,所以redis默认的是使用rdb持久化

四、RDB和AOF的混合使用

1、谁的优先级大

我们知道Redis默认使用的是RDB,那么如果将aof与 rdb同时开启,是不是rdb的优先级就更大,先加载RDB文件呢?我们先来看个流程图:

从该图中我们可以看出,如果有aof文件,则先加载aof文件;若没有aof文件而开启了rdb则先加载rdb文件,如果两个都没开启,则该怎么执行就怎么执行。

2、开启RDB与AOF的混合模式

①:开启混合方式

aof-use-rdb-preamble yes(默认是yes)

②:开启结果

PS:前提是开启AOF。

RDB做全量的持久化,AOF做增量的持久化:即先使用RDB进行快照的储存,然后使用AOF持久化做所有写的操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。

总的来说最后生成的也是aof文件,但是该文件一部分包含了RDB格式,一部分包含了AOF格式。

如下所示:

五、总结

最后做一个总结,首先博主的这篇博客的记录是学习了b站上up主【狂神说JAVA】、【尚硅谷】的redis学习视频后写的。然后这篇博客也是在以前Redis版本上的基础上结合最新的版本完成的。当然博主自己写的这篇博客也是让我自己对Redis的持久化功能有了更进一步的认识,我个人觉得这篇博客对一些常见的关于Redis的持久化的面试题的回答是涉及的足够的。如果对正在阅读的小伙伴有帮助,不要忘记点赞👍哦。

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

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

相关文章

RF框架自定义测试库开发

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Audition 2023(Au)下载安装及详细安装教程

Audition(Au)的介绍 Adobe Audition&#xff08;简称Au&#xff0c;原名Cool Edit Pro&#xff09;是由Adobe公司开发的一个专业音频编辑和混合环境。Audition专为在照相室、广播设备和后期制作设备方面工作的音频和视频专业人员设计&#xff0c;可提供先进的音频混合、编辑、控…

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令 10.1 ret 和 retf检测点 10.1 10.2 call 指令10.3 依据位移进行转移的 call 指令检测点 10.2 10.4 转移的目的地址在指令中的 call 指令检测点 10.3 10.5 转移地址在寄存器中的 call 指令10.6 转移地址在内存中的 call 指令检…

LabVIEW高速信号测量与存储

LabVIEW高速信号测量与存储 介绍了LabVIEW开发的高速信号测量与存储系统&#xff0c;解决实验研究中信号捕获的速度和准确性问题。通过高效的数据处理和存储解决方案&#xff0c;本系统为用户提供了一种快速、可靠的信号测量方法。 项目背景 在科学研究和工业应用中&#xf…

session和cookie理解

目录 1、理解无状态 2、Session和Cookie理论 3、使用session存储数据 前言&#xff0c;理解session与cookie对于我们做web测试、接口测试、性能测试都是非常有帮助的。 cookie是一些数据信息&#xff0c;存储在浏览器端。 session是存储于服务器端的特殊对象&#xff0c;服务器…

Java并发基础:CompletableFuture全面解析

内容概要 CompletableFuture类使得并发任务的处理变得简单而高效&#xff0c;通过简洁的API&#xff0c;开发者能轻松创建、组合和链式调用异步操作&#xff0c;无需关心底层线程管理&#xff0c;这不仅提升了程序的响应速度&#xff0c;还优化了资源利用率&#xff0c;让复杂…

【Redis】 如何保证数据不丢失?

目录 1.Redis 持久化 1.1 RDB 持久化 1.2 AOF 持久化 1.3 混合持久化 2.Redis 集群 2.1 主从同步 2.2 哨兵模式 2.3 Redis Cluster 小结 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中&#xff08;如硬盘&#xff09;的过程&#xff0c;以便在程序重…

C++之Easyx——图形库的基本准备工作

什么是Easyx&#xff1f; EasyX Graphics Library 是针对 Visual C 的免费绘图库&#xff0c;支持 VC6.0 ~ VC2022&#xff0c;简单易用&#xff0c;学习成本极低&#xff0c;应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 它比Red PandaDev C上的图形库功能要强…

好用的UI自动化测试平台推荐

随着软件行业的不断发展&#xff0c;建立一个完善的自动化测试体系变得至关重要。目前&#xff0c;自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言&#xff0c;企业在UI自动化测试方面的覆盖率仍然相对较低。 接口自动化测试可以模拟和执行应用程序…

怎么清理mac系统缓存系统垃圾文件 ?怎么清理mac系统DNS缓存

很多使用苹果电脑的用户都喜欢在同时运行多个软件&#xff0c;不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象&#xff0c;这时候我们就可以去清理下内存&#xff0c;不过很多人可能并不知道正确的清内存方式&#xff0c;下面就和小编一起来看看吧。 mac系统是一…

虚拟机--pc端和macOS端互通

windows开启虚拟化 要在Windows系统中开启虚拟化&#xff0c;您可以按照以下步骤操作&#xff1a; 准备工作&#xff1a; 确保您的计算机CPU支持虚拟化技术。在BIOS中开启相应的虚拟化支持。 开启虚拟化&#xff1a; 打开控制面板&#xff0c;点击程序或功能项&am…

初识KMP算法

目录 1.KMP算法的介绍 2.next数组 3.总结 1.KMP算法的介绍 首先我们会疑惑&#xff0c;什么是KMP算法&#xff1f;这个算法是用来干什么的&#xff1f; KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于字符串匹配的经典算法&#xff0c;它的目标是在一个主文本…

Allegro172版本如何用自带功能改变过孔网络属性操作指导

Allegro172版本如何用自带功能改变过孔网络属性操作指导 在用Allegro做PCB设计的时候,时常会需要将过孔的网络进行变更,可以将原来的过孔删除,再重新打一个,这种方法难免会繁琐一些。 当然我们可以借助skill工具来完成更换过孔网络的更改,除此之外,Allegro自带的功能完成…

Excel常用快捷键(持续更新)

引言 excel是我们办公中经常使用的工具&#xff0c;古语言“工欲善其事必先利其器”。excel是一个好的工具&#xff0c;但是工具里面有很多常用的快捷键&#xff0c;若我们熟记这些快捷键&#xff0c;便可以提高我们的工作效率。本文为持续更新&#xff0c;望有助于搬砖。 1、C…

简单的线程池——从单线程到多线程——从零基础到零基础(站长素材)

多进程&#xff08;Process&#xff09;-读取到数据&#xff0c;要用cpu来运行大量的次数和时间&#xff08;多线程&#xff09;&#xff08;cpu密集型&#xff09;——multiprocessing 多线程&#xff08;Thread&#xff09;-IO多的&#xff0c;同时运行任务数目不多&#xf…

stm32学习笔记-STLINK使用

stm32学习笔记-STLINK使用 使用ST-LINK调试程序进度表格 使用ST-LINK调试程序 说明 组成 总结 记录使用STLINK进行项目的烧写和调试&#xff0c;旨在高效的进行代码调试学习工具包括笔记本、keil5MDK、stm32f030c8t6电表主机、STLINK V2、导线、电表代码总的来说&#xff0…

Kernel 地图

前言 在 Linux Kernel 中&#xff0c;根据 Makefile 和 Kconfig&#xff0c;可以快速地了解一个小的内核子系统。所以我将这两个文件称之为 Kernel 地图。 Kernel 地图 基本上&#xff0c;Linux 内核中&#xff0c;每一个目录下面都有一个 Makefile 和一个 Kconfig 文件。这…

ubuntu 之 zeitgeist-fts 占用内存

座右铭&#xff1a;怎么简单怎么来&#xff0c;以实现功能为主。 欢迎大家关注公众号与我交流 sudo chmod -x /usr/bin/zeitgeist-daemonsudo chmod -x /usr/bin/zeitgeist-datahublocate zeitgeist-ftssudo chmod -x /usr/lib/x86_64-linux-gnu/zeitgeist-fts # 使用 locate z…

星纪魅族宣布 All in AI;欧盟将首次对苹果处以罚款丨 RTE 开发者日报 Vol.146

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

125.乐理基础-五线谱-大六度、小六度

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;124.乐理基础-五线谱-大三度、小三度-CSDN博客 上一个内容里练习的答案&#xff1a; 然后g1到降e2是一个六度&#xff0c;g1到e2也是一个六度&#xff0c;但是它们俩距离是不一样的 然后在六度前面加上大或小&…