当前位置: 首页 > news >正文

【Redis 高级】- 持久化 - RDB

【Redis 高级】- 持久化 - RDB

👑什么是持久化呢?

  • 那当然是够持久呀,这个持久如果在你不主动去删除的情况下,它就一直存在的。

🎷那么这有什么用呢?

  • 举个栗子:我们在用 PowerPoint 在写价值 2 个亿的 PPT ,要求明天一大早就要去展示,今天加班到凌晨都必须搞出来,表面很开心,内心在奔腾的你接受了这个,老板的强行建议。

    加班到了凌晨 2 点终于搞完了,正准备休息一会,突然不小心把电源线一脚踢掉了,你颤抖的手点击了一下电源开机键,当屏幕的 win 界面加载出来后,整个人到傻了。桌面干净的只剩下了桌面,这个时候你的内心已经完全奔溃了,想着自己当时,如果保存到文件夹中,就不会出现这样的问题了。一时间你受不了自己的这种行为,自己扇了自己一巴掌,哎!不疼~,原来是在做梦呀。

    赶紧从梦里醒来,才发现原来自己的已经把文件,保存到了文件夹了呀。

通过上面的例子,可以看到 Ctrl+S 的重要性了吧,其实哈,对于我们的 Redis 也是可以进行 Ctrl+S 的,只是方式有些许的不同而已。但目的都是一样 ,PPT 进行保存,是将内存中的数据保存到磁盘中,而对于 Redis 而言,也是将内存中的数据保存到磁盘中。

这就是所谓的持久化,其实目的就是为了提高数据的抗风险能力。

🎸Redis 的持久化都是怎么进行处理的呢?-

  • 哎,对于一个数据要将其中内存保存到磁盘中,首先能想到的是那种方式呢?

    当然是最简单粗暴的,直接将数据的本身进行保存呀,就相当于从内存中复制一份一模一样的数据,直接写到磁盘中呀。

    是呢,确实是这样,我们的 Redis 中的一种持久化的策略中,就用到了上述所猜想的一种理念,直接暴力的保存数据即可。

    这种方式有个名字叫做 RDB(保存的是数据),有点原汁原味的感觉赖

  • emmm,那有没有其他的什么方式呢?

    哎,这个还真有,我们每一次操作的时候,是不是后台都会生成一个操作的记录结果呀,对咯,这个操作的记录结果其实就是我们常常说的 日志 ,既然我们的日志中记录了,我们每一次的操作的过程,那我们可不可以想办法,在 Redis 启动的时候,将日志中的所有的操作都读取出来,然后将所有的指令都执行一遍,这样就可以保证,我们的所有的数据都会刷新到我们的内存中呢?

    是的没错,这样的方式其实就是 AOF (保存的操作的过程)

RDB 的启动方式:

  • save 手动执行一次保存

RDB 启动方式 – save 指令的相关配置

  • 设置本地数据库的文件名,默认为 dump.rdb ,通常设置为 dump-端口号.rdb

dbfilename filename

  • 设置存储 .rdb 文件路径,通常设置为存储空间较大的目录,目录名为 data

    dir path

  • 设置存储至本地数据库时是否数据压缩,默认为 yes ,设置为 no ,节省 CPU 的运行时间,但存储文件变大

    rdbcomperession yes|no

  • 设置读写文件过程中是否进行 RDB 格式校验,默认 yes ,设置为 no,节约读写 10% 时间消耗,单存存在数据损坏的风险

    rdbchecksum yes|no

    bind 192.168.10.101
    port 6379
    logfile "6379.log"
    dir /redis/data
    dbfilename "dump-6379.rdb"
    

    在每一次执行完毕所有的命名之后,执行 save 指令,就会自动的将数据压缩,存储到 dir 指定的目录下,在每一次的开机之后,会自动的加载数据到 Redis 当中。

RDB启动方式 – save 执行的工作原理

  • image-20230219163959461

    在上面的我们可以看到,当我们执行 save 指令后,Redis 有一个数据压缩并保存的时间。

    image-20230219164510029

    有与 Redis 是一个单线程的数据库,所以当我们执行 save 指令的时候,如果说此时我们的数量量是比较大的,那么在执行任务的队列中就会出现阻塞的状态,导致后的获取数据的 get 执行,一直处于等待,知道 save 指令执行完毕。

🏹 那么对于如果数据库过大,单线程执行的而效率会变低那么有没有解决的办法呢?

  • 手动启动后台保存操作,但不是立即执行

    bgsave

RDB启动方式 – bgsave 指令的相关配置

  • 后台存储过程当中如果出现错误现象,是否停止保存操作,默认 yes

    stop-writes-on-bgsave-error yes|no

  • 其他

    dbfilename filename

    dir path

    rdbcopression yes

    rdbchecksum yes|no

    image-20230219165418964

    image-20230219165456020

    bgseve 的执行原理,其实就是后台开启了一个子线程,而子线程负责对我们的文件进行生成,然后将保存成功的消息,返回给我们的主进程并展示。

RDB启动方式 – 自动持久化

  • 设置自动持久化的条件,满足限定时间范围内 key 变化的次数,当达到指定时进行持久化

save second changes

  • 参数

second: 监控的时间范围

changes: 监控时间范围内 key 的变化量

  • 示例

save 900 1

save 300 10

save 60 10000

自动持久化的原理

image-20230219170320527

image-20230219170336347

在我们执行每一条命令的时候,首先会对执行的命令进行判断,如果说一条命令满足了

1、操作会对数据产生影响 (执行了 del 操作,但执行失败)

2、真正产生了影响 (执行了 del 操作,执行成功)

3、是否进行数据上的对比 (该数据删除没有什么影响,但 set 的操作会有影响)

只有满足了以上三点,那么就会将影响的数量 +1

注意:save 配置要根据实际的业务情况而进行设置,如果你设置的过高,或者过低可能都会造成,业务上性能的影响。

👾 其实对于 save 的自动执行,最终执行的也是 bgsave 的操作,只是将原来的手动,变为了自动。

RDB 三种启动方式的对比

方式save指令bgsave指令
读写同步异步
阻塞客户端指令
额外内存消耗
启动新进程

RDB 优缺点

优点

  • RDB是一个紧凑压缩的二进制文件,存储效率较高
  • RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
  • RDB恢复数据的速度要比AOF快很多
  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复。

缺点

  • RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
  • bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能
  • Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象

相关文章:

【Redis 高级】- 持久化 - RDB

【Redis 高级】- 持久化 - RDB 👑什么是持久化呢? 那当然是够持久呀,这个持久如果在你不主动去删除的情况下,它就一直存在的。 🎷那么这有什么用呢? 举个栗子:我们在用 PowerPoint 在写价值 …...

SpringSecurity的安全认证的详解说明(附完整代码)

SpringSecurity登录认证和请求过滤器以及安全配置详解说明 环境 系统环境:win10 Maven环境:apache-maven-3.8.6 JDK版本:1.8 SpringBoot版本:2.7.8 根据用户名密码登录 根据用户名和密码登录,登录成功后返回Token数据…...

详解制造业业务数据模型

业务数据在企业数字化转型或单体应用的开发中都是至关重要的。站在跨业务跨部门的企业数字化转型角度,离不开业务架构的设计,详细的业务领域和业务数据模型是后续应用架构和数据架构的必要输入。站在单部门单场景的信息化角度,应用程序的需求…...

BigDecimal使用注意避坑

目录一. BigDecimal的初始化精度丢失问题二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常三. 不要使用BigDecimal的equals方法比较大小, 否则可能会因为精度问题导致比较结果和预期的不一致在java.math包中提供了对大数字的操作类,用于进…...

windows环境下,vue启动项目后打开chrome浏览器

前言:关于vue启动后打开chrome浏览器,我查了很多资料,方案如下: 1、增加环境变量BROWSER为chrome(试了没效果) 2、设置系统的默认浏览器为chrome(应该可以,但没试;因为…...

SpringBoot2.X整合ClickHouse项目实战-从零搭建整合(三)

一、ClickHouseSpringBoot2.XMybatisPlus整合搭建 二、需求描述和数据库准备 三、ClickHouse统计SQL编写实战和函数使用 四、ClickHouseSpringBoot2.X案例-基础模块搭建 controller/request层 mapper层 model层 service层 五、ClickHouseSpringBoot2.X案例-数据统计接口 …...

学海记录项目测试报告

⭐️前言⭐️ 本篇文章是博主基于学海记录的个人项目所做的测试报告,用于总结运用自动化测试技术,应用于自己的项目。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录…...

【1792. 最大平均通过率】

来源:力扣(LeetCode) 描述: 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你…...

言简意赅+图解 函数传参问题(传值、传地址 500字解决战斗)

1、传值 2、传地址 不论是传值,还是传地址,形参都是对于实参的一份拷贝 下图为按值传递进行交换: 形参left拷贝一块新空间,形参right拷贝一块新空间 下图为按指针传递进行交换 形参left拷贝一块新的空间,形参right…...

UML-时序图以及PlantUML绘制

介绍 时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息…...

【Redis】Redis 有序集合 Zset 操作 ( 简介 | 查询操作 | 增加操作 | 删除操作 | 修改操作 )

文章目录一、有序集合 Zset二、查询操作1、查询 Zset 所有数据2、查询 Zset 所有数据和评分3、查询指定评分范围的 Zset 数据4、查询指定评分范围的 Zset 数据并从大到小排序5、统计指定评分范围的 Zset 数据个数6、查询指定元素在 Zset 有序集合中的排名三、增加操作1、向 Red…...

Java特性之设计模式【策略模式】

一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略…...

IR-CUT 保证摄像机成像效果的滤镜

IR-CUT双滤镜是指在摄像头镜头组里内置了一组滤镜,当镜头外的红外感应点侦测到光线的强弱变化后,内置的IR-CUT自动切换滤镜能够根据外部光线的强弱随之自动切换,使图像达到最 佳效果。也就是说,在白天或黑夜下,双滤光片…...

openpnp - 普通航空插头和PCB的连接要使用线对板连接器

文章目录openpnp - 普通航空插头和PCB的连接要使用线对板连接器概述改进实际效果总结ENDopenpnp - 普通航空插头和PCB的连接要使用线对板连接器 概述 和同学讨论问题, 准备将航空插头连接到PCB上. 航空插头选用GX12-4公头, 拧到开孔的铁板上. 然后航空插头公头再与PCB连接. 铁…...

Python3 错误和异常实例及演示

作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python 有2种错误很容易辨认:语法错误和异常。 Python assert(断言)用于判断…...

Android 9.0第三方app根据包名设置为横屏显示

1.概述 在android9.0的系统rom定制化开发中,在某些横屏的设备比如平板电脑,tv智能电视,广告机等等设备中,通常系统是默认横批显示的,但是在安装一些竖屏app的时候, 就会旋转为竖屏,这个时候操作app也不方便,所以产品需求要求竖屏也需要根据包名横屏显示出来,这就需要在…...

MySQL会导致索引失效的情况与解决索引失效的方法

什么情况会导致索引失效 索引失效也是慢查询的主要原因之一,常见的导致索引失效的情况有下面这些: 1.使用 SELECT * 进行查询;2.创建了组合索引,但查询条件未准守最左匹配原则;3.在索引列上进行计算、函数、类型转换等操作;4.以 % 开头的 L…...

使用nginx单独部署Vben应用

前言 本文主要介绍Vben使用nginx单独部署的方式,其实前端发展到现在已经不是当年的jsp,asp必须要和后端一起部署了。单独部署调试的工具也很多,比如vue-cli-service 和 Vben中用到的vite ,当然这些我们一般用在开发的工程中。正式…...

ES6新特性详解

文章目录1. let和const1.1 let声明变量1.2 const声明常量2. 模板字符串3. 解构赋值3.1 数组的解构赋值3.2 对象的解构赋值4. 函数扩展4.1 参数默认值4.2 剩余参数4.3 箭头函数5. 对象扩展5.1 对象简写5.2 属性名表达式5.3 扩展运算符6. Symbol7. Iterator和Generator7.1 Iterat…...

Ubuntu下安装 ntfs-3g

目录1.FAT32、NTFS和exFAT2.ubuntu 安装 ntfs-3g2.1 直接安装2.2 源码安装1.FAT32、NTFS和exFAT U盘在格式化的时候都会有三种格式分别是FAT32、NTFS和exFAT。 FAT32格式   FAT32格式硬盘分区的最大容量为2TB,虽然U盘做不到,但是现在1xTB硬盘都有了&…...

【专业认知】抖音就业 / 保研北大教育学 / 留学南加州EE / 微软就业

2023.2.18 一. 周金辉学长分享——本科经验分享 0 简介 计算机农大本硕 硕士毕业后在抖音公司工作 1 行业前景:计算机专业能做什么? 1.1 计算机行业发展路线 远古时代: 二战开始,计算机技术发展,出现互联网 包…...

【算法题】2 的 n 次幂的背后

前言: 说实话,真的不爱写算法题相关的文章了,觉得没啥意义,但是对这种比较好玩并且简单,学会了就能很好提高算法效率的文章,还是要写一写,不哭不哭,你不会不是你的错,只是…...

【人工智能AI】一、NoSQL 企业级基础入门《NoSQL 企业级基础入门与进阶实战》

写一篇介绍什么是NoSQL的技术文章,分5个章节,每个章节细分到3级目录,重点介绍一下优缺点,适用场景,未来发展趋势等。 一、NoSQL简介 1.1 什么是NoSQL NoSQL(Not only SQL),意思是“…...

Ubuntu安装opencv库3.4.10,并在cmake工程中引入opencv库

Windows下安装不同,Ubuntu安装OpenCV库时,需要事先安装依赖,而且不同OpenCV库所需的依赖可能会有所不同,下面的依赖亲测 3.4.10 和 4.5.5版本的有效,但是4.6以上版本安装可能会报错。 参考链接:https://bl…...

实现8086虚拟机(四)——mov 和 jmp 指令解码

文章目录mov 指令解码jmp 指令解码这篇文章举例来讲讲 mov 指令和 jmp 指令解码函数的实现,其他的指令解码函数都与这些类似。mov 指令解码 以 mov 指令中的一类:寄存器/内存 到/从 寄存器,来详细说明解码函数的实现。 机器指令格式如下&am…...

数据库技术-函数依赖、键与约束、范式

一、函数依赖 给定一个x,能唯一确定一个Y,就称x确定Y,或者说Y依赖于x,例如YX*X函数。 函数依赖又可扩展以下两种规则: 部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即A)可以确定C&a…...

shiro CVE-2020-1957

0x00 前言 在之前只是单纯的复现了漏洞&#xff0c;没有记笔记&#xff0c;所以补充了这篇分析笔记。 影响版本&#xff1a;shiro < 1.5.2 0x01 环境搭建 环境用的是&#xff1a;https://github.com/lenve/javaboy-code-samples/tree/master/shiro/shiro-basic 0x02 漏…...

RabbitMQ 入门到应用 ( 五 ) 基本应用

6.更多应用 6.1.AmqpAdmin 工具类 可以通过Spring的Autowired 注入 AmqpAdmin 工具类 , 通过这个工具类创建 队列, 交换机及绑定 import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Di…...

部署dapr的辛酸历程

前言dapr大概的了解&#xff0c;个人理解他就是一个分布式服务的管理&#xff0c;把微服务常用的组件(缓存&#xff0c;消息中间件、分布式锁、安全id4等)和监控以及服务注册、发现等等一系列功能以一个很抽象的方式管理起来。可能我们部署微服务用consul、ocelot、polly套件、…...

golang入门笔记——内存管理

文章目录自动内存管理概念自动内存管理-相关概念&#xff1a;追踪垃圾回收&#xff1a;分代GC&#xff08;Generational GC&#xff09;引用计数内存分配Go内存分配-分块Go内存分配——多级缓存Go内存管理优化Balanced GC自动内存管理 概念 1.动态内存 程序在运行时根据需求…...

租车公司/seo就业哪家好

问题&#xff1a;[多选] 关于LTE子帧的描述&#xff0c;哪些是正确的()A . 下行常规子帧控制区域与数据区域进行频分B . 特殊子帧由三个特殊域组成&#xff0c;分别为DwPTS、GP和UpPTSC . 下行MBSFN专用载波子帧中不存在控制区域D . 上行常规子帧控制区域与数据区域进行频分根据…...

菏泽做网站的公司/网站搜索优化

总有许多人在讨论C的是是非非&#xff0c;我是人云亦云那个。 当你试图拥有两个以上类的特性时&#xff1a; 1 组合&#xff0c;用一个新类把那两个类的对象包含起来。很方便&#xff0c;很简单。缺点是&#xff1a;首先&#xff0c;会有太多的接口函数存在于两个基类对象与外…...

无锡网站建设价格费用/win7优化软件

概述一般我们讲的虚拟化有两种类型&#xff1a;Hypervisor直接在安装在宿主机的逻辑上&#xff1a;Hypervisor 直接安装在物理机上&#xff0c;多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。K…...

建设工程协会网站/疫情最新政策最新消息

基于HTML和JS实现的保护海洋动物、保护环境的硬核小游戏 《西瓜皮斯拉》 目录 基于HTML和JS实现的保护海洋动物、保护环境的硬核小游戏 1 《西瓜皮斯拉》 1 Part1. 作品设计 2 作品主题 2 作品设计思路 2 单人模式&#xff1a; 2 双人模式&#xff1a; 3 Part2. 代码设计 3 模…...

有没有专门做奶粉的网站/快速排名工具免费查询

第一次被破坏 其实发生在双亲委派模型出现之前–即JDK1.2发布之前。由于双亲委派模型是在JDK1.2之后才被引入的&#xff0c;而类加载器和抽象类java.lang.ClassLoader则是JDK1.0时候就已经存在&#xff0c;面对已经存在 的用户自定义类加载器的实现代码&#xff0c;Java设计者…...

flash代码做网站教程/上海公关公司

计算机编程术语&#xff1a; 参考网址&#xff1a;https://blog.csdn.net/linear_luo/article/details/52318820 application 应用程式 应用、应用程序 application framework 应用程式框架、应用框架 应用程序框架 architecture 架构、系统架构 体系结构 argument 引数&am…...