Redis系统学习(高级篇)-Redis持久化-RDB方式

news2025/7/16 16:43:58

目录

一、RDB是什么?

二、RDB的执行时机

三、RDB的其他命令

四、RDB的执行原理

五、RDB的优缺点


一、RDB是什么?

RDB全称叫Redis Database Backup file(Redis数据备份文件) ,也叫Redis数据快照,就是将数据快照保存在磁盘中,下次再从磁盘中恢复到内存中。这个RDB文件默认存在运行目录

二、RDB的执行时机

有四个:

1. Redis停机的时候

会自动执行save命令,完成RDB持久化

但这种方式并不是没有问题的,如果遇到一个很极端的情况,可能还没有生成数据快照,那么就可能造成数据丢失。因此建议手动执行save命令

2. 执行save命令

这个就能执行RDB,但是这个是由主进程来执行RDB的,因此现在主进程就干不了其他事了,就阻塞住了,就不能再去处理其他请求了,效率不高。所以就有了bgsave命令的出现,这个可以开一个子进程异步的执行,提高了效率

3. 执行bgsave命令

这个的话就是开了一个子进程来单独的异步执行RDB操作。提高了效率

4. 触发RDB条件时

可以在redis.conf文件中配置触发条件。

触发条件就是在一段多长的时间内,至少对多少个key执行了修改操作就自动执行RDB

使用:

save  时间  key个数

如果是 save "" 则代表禁用掉RDB

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 900 1  
save 300 10  
save 60 10000 

三、RDB的其他命令

可以设置是否压缩、RDB文件名、RDB的存放位置

# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes

# RDB文件名称
dbfilename dump.rdb  

# 文件保存的路径目录
dir ./ 

四、RDB的执行原理

当执行bgsave命令的时候

会fork一个子进程

其实Redis是不能直接的操作物理内存的,但是在Redis中有一个虚拟内存,虚拟内存可以通过页表来映射物理内存,fork过去关键就是将页表复制过去了,所以子进程也能够映射到主进程映射的那个物理内存数据,因此就实现了子进程和主进程保持相同的数据。这样就可以不需要直接拷贝物理内存也能达到备份的效果,提高效率,然后子进程映射到那个物理内存的数据之后将其写到新的RDB文件中,最后将老的RDB文件进行替换

但是这里需要注意的是这里物理内存中的数据是只能读的,不能够直接写的,因为如果又读又写(修改)势必存在并发问题,就可能还没来得及读到写的数据,造成读到的不是最新的数据,读到的是脏数据。所以现在就在物理内存中又复制了一个副本,对这个副本进行修改,然后再将主进程的虚拟内存映射了这个副本,就确保读到的是最新的数据,随后也能保证子进程也能映射到这个最新的数据

这个如果说子进程还没读完了,现在主进程在疯狂对数据进行修改的话,对每个数据都进行修改,那么就会都产生一个副本,会很造成物理内存的占用 

注意:虽然说这种方式异步的产生一个子进程的方式已经很大程度上让主进程不阻塞了,但并不是完全不阻塞的,在fork的时候其实是主进程只能干这件事的,不能再处理其他请求了。也就是其实是主进程相较于原来save的方式就不要再处理这个写RDB文件的过程了,只需要阻塞这个fork的过程

五、RDB的优缺点

优点:

1. 恢复速度快

2. 产生的文件不是很大

缺点:

1. 因为这个触发RDB是存在这个时间间隔的,不能将这个时间间隔搞得太小,这个很影响性能,Redis根本忙不过来 所以就需要搞得相对来说长一点 长一点的话  比如说60s 如果说这60s的间隔内恰好Redis宕机了,就会导致上一次提交到目前所有的操作就全不见了,导致数据丢失

这个归根结底是因为Redis这种处理RDB能力有限的原因,之后会有AOF的方式,这种是每次都记录写操作命令,因此能很大程度的保留操作,所以AOF方式就能很好的保证数据的完整性

2. fork子进程、写出RDB文件、压缩这些操作都是挺耗CPU时间的

因此其实RDB对资源的占用并不小,

内存资源就是那个fork过程中的产生副本的时候

CPU资源就是压缩,写出RDB文件时候

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

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

相关文章

针对zkVM中Memory Consistency Checks的Polynomial IOPs

1. 引言 主要参考Yuncong Zhang等人2023年论文《Polynomial IOPs for Memory Consistency Checks in Zero-Knowledge Virtual Machines》。 在设计zkvm时,需检查其所有组件的功能一致性,包括: instruction fetcher寄存器文件算术化逻辑单元…

模型实际训练笔记1—AlexNet

1、AlexNet网络模型介绍: AlexNet 是一种深度卷积神经网络,由Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在2012年开发。它是深度学习领域的重要里程碑,因为它在当年的 ImageNet 大规模图像分类竞赛(ILSVRC&#xff09…

【深度学习】pytorch——快速入门

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ pytorch快速入门 简介张量(Tensor)操作创建张量向量拷贝张量维度张量加法函数名后面带下划线 _ 的函数索引和切片Tensor和Numpy的数组之间的转换张量(tensor)与标量…

使用 for 和 mv 批量修改文件名

我们知道,linux 中可以使用 mv 命令来移动或者重命名文件和目录,且不会改变 inode 编号和时间戳。其语法如下: mv [-f | -i | -n] [-hv] source target mv [-f | -I | -n] [-v] source … directory 但是,mv 命令一次只能操作一个…

AXI总线实操

1.源码来源vivado xilinx官方实例 2.[2:0]M_AXI_ARSIZE:指的是一个 data transfer 里面有多少 Bytes——这里我写的是3(即2^38B)——8*864bit代表你想往axi总线的搬移数据的位宽。 3. Burst length: ARLEN[7:0]和AWLEN[7:0] 突发传输长度是指在一次突发…

模型实际训练笔记2-VGG

1、VGG简介: VGG网络是由牛津大学的视觉几何组(visual geometry group)首次提出来的。 VGG 网络,也称为Visual Geometry Group网络,是计算机视觉领域的一个深度卷积神经网络架构。它于2014年由牛津大学的研究团队开发…

PHP服务器端电商API原理及示例讲解(电商接口开发/接入)

下面小编就为大家分享一篇PHP服务器端API原理及示例讲解(接口开发),具有很好的参考价值,希望对大家有所帮助 相信大家都做过PHP请求电商API接口获取数据,比如淘宝平台商品API接口,订单接口,京东接口,1688接…

IDEA在service面板中不显示微服务的项目

在.idea文件夹下的workspace文件中的project标签内添加如下代码段&#xff0c;&#xff0c;重启idea即可看到所有服务出现在了service面板中 <component name"RunDashboard"><option name"configurationTypes"><set><option value&q…

[计算机提升] 系统软件:信息类

3.2 信息类&#xff1a;查看相关信息 3.2.1 检查windows版本&#xff1a;winver 用于查看Windows系统版本&#xff1a; 3.2.2 系统信息&#xff1a;msinfo32 用于查看系统相关信息&#xff0c;包括&#xff1a;系统摘要、硬件资源、组件、软件环境。 3.2.3 查看系统信息…

Qt 使用QtXlsx操作Excel表

1.环境搭建 QtXlsx是一个用于读写Microsoft Excel文件&#xff08;.xlsx&#xff09;的Qt库。它提供了一组简单易用的API&#xff0c;可以方便地处理电子表格数据。 Github下载&#xff1a;GitHub - dbzhang800/QtXlsxWriter: .xlsx file reader and writer for Qt5 官方文档…

Fetch库

scalaimport com.github.katongli.http.crawler.Fetchval fetchFetch()fetch.setProxyHost("jshk.com.cn//aa")fetch.setProxyPort(0126)val responsefetch(url)val imagesresponse.images//你可以使用println将获取的图片打印出来println(images) 解释&#xff1a;…

markdown增加目录索引,实现点击目录跳转到对应的内容目录标题

文章目录 1. 教程1.1 首先正常编写文章例如如下1.2 原理 2. 示例文件2.1 标题12.1.1 小标题12.1.1.1 小小标题12.1.1.2 小小标题2 2.1.2 小标题2 1. 教程 1.1 首先正常编写文章例如如下 如果使用的是typora则可以直接点击段落-》内容目录&#xff1b;则会自动生成目录 1.2 原理…

Linux之J2EE项目部署与发布(Linux版本)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《LInux实战开发》。&#x1f3af;&#x1f3af; …

高阶JAVA篇-深入了解字符集

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 字符集的说明 1.1 ASCII 字符集 1.2 GBK 字符集 1.3 UTF-8字符集 2.0 字符集的编码与解码 2.1 编码提供了常见的方法 2.2 解码提供了常见的方法 1.0 字符集的说明 字…

【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

文章目录 1. 写在前面2. 页面配置规划3. 制定模板格式4. 模板引擎实现5. 模板爬虫优势 1. 写在前面 作为一名爬虫开发者来说&#xff0c;涉及数据采集和爬虫开发时&#xff0c;往往都面临着各种挑战。包括技术复杂性、维护成本以及数据源结构的不断变化 早期我们对爬虫开发方式…

【蓝桥杯选拔赛真题45】python调和级数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python调和级数 一、题目要求 1、编程实现 2、输入输出 二、算法分析

众和策略:微软大动作

当地时间周二&#xff0c;美股首要指数全线收涨。但从月度数据来看&#xff0c;美股首要指数录得“三连跌”&#xff0c;10月份&#xff0c;道指跌1.36%&#xff0c;标普500指数跌2.2%&#xff0c;纳指跌2.78%。其间&#xff0c;标普和道指均为2020年3月以来初次呈现三个月连跌…

不容错过的设计软件,产品设计必看

一.图片绘制和处理工具 产品设计很多时候是需要完成产品效果图的相关工作&#xff0c;所以一些图片绘制和处理工具&#xff0c;二维或三维的都需要了解一下。 2D软件&#xff1a; 1、photoshop(PS) AdobePhotoshop&#xff0c;简称“PS这是Adobe开发并发布的一款图片处理软…

innovus: set_ccopt_property的基本用法

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 clock route clock route的net type分为三种&#xff0c;分别是root、trunk和leaf&#xff0c;其中root是指fanout超过routing_top_fanout_count约束的net&#xff0c;leaf是指…

mysql:B+树/事务

B树 : 为了数据库量身定做的数据结构 我们当前这里的讨论都是围绕 mysql 的 innodb 这个存储引擎来讨论的 其他存储引擎可能会用到hash 作为索引,此时就只能应对这种精准匹配的情况了 要了解 B树 我们先了解 B树, B树 是 B树 的改进 B树 有时候会写作 B-树 (这里的" -…