redis数据安全(二)数据持久化 RDB

目录

一、RDB快照持久化 原理

二、RDB快照持久化配置(redis.conf):

三、触发RDB备份:

1、自动备份,需配置备份规则:

2、手动执行命令备份(save | bgsave):

3、flushall命令:

四、RDB的备份恢复:

五、RDB优缺点:


以下配置以Redis-x64-3.2.100.zip为例,介绍下 RDB快照持久化 

一、RDB快照持久化 原理

1、单线程: Redis 是单线程程序,这个线程要同时负责多个客户端套接字的并发读写操作和内存数据结构的逻辑读写。在服务线上请求的同时,Redis 还需要进行内存快照,内存快照要求 Redis 必须进行文件 IO 操作,这意味着单线程同时在服务线上的请求还要进行文件 IO 操作,文件 IO 操作会严重拖垮服务器请求的性能。还有个重要的问题是为了不阻塞线上的业务,就需要边持久化边响应客户端请求。持久化的同时,内存数据结构还在改变,如果一个大型的 hash 字典正在持久化过程中,过来一个删除请求如何处理?Redis 使用操作系统的多进程 COW(Copy On Write) 机制来实现快照持久化。

2、fork(多进程):Redis 在持久化时会调用 glibc 的函数 fork 产生一个子进程,快照持久化完全交给子进程来处理,父进程继续处理客户端请求。子进程刚刚产生时,它和父进程共享内存里面的代码段和数据段。这是 Linux 操作系统的机制,为了节约内存资源,所以尽可能让它们共享起来。在进程分离的一瞬间,内存的增长几乎没有明显变化。

子进程做数据持久化,它不会修改现有的内存数据结构,它只是对数据结构进行遍历读取,然后序列化写到磁盘中。但是父进程不一样,它必须持续服务客户端请求,然后对内存数据结构进行不间断的修改。

这个时候就会使用操作系统的 COW 机制来进行数据段页面的分离。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改。这时子进程相应的页面是没有变化的,还是进程产生时那一瞬间的数据。

随着父进程修改操作的持续进行,越来越多的共享页面被分离出来,内存就会持续增长。但是也不会超过原有数据内存的 2 倍大小。另外一个 Redis 实例里冷数据占的比例往往是比较高的,所以很少会出现所有的页面都会被分离,被分离的往往只有其中一部分页面。子进程因为数据没有变化,它能看到的内存里的数据在进程产生的一瞬间就凝固了,再也不会改变,这也是为什么 Redis 的持久化叫「快照」的原因。接下来子进程就可以非常安心的遍历数据了进行序列化写磁盘了。

这里之需要需要通知父线程,是因为父线程要做个记录,保留最后一次持久化的时间。

二、RDB快照持久化配置(redis.conf):

1、指定备份文件的名称:在redis.conf中,可以修改rdb备份文件的名称,默认为dump.rdb。

2、指定备份文件存放的目录:

在redis.conf中,rdb文件的保存的目录是可以修改的,默认为Redis启动命令所在的目录

  

  

 3、stop-writes-on-bgsave-error:当磁盘满时,是否关闭redis的写操作,stop-writes-on-bgsave-error用来指定当redis无法写入磁盘的话,是否直接关掉redis的写操作,
推荐yes。默认配置如下:

4、rdb备份是否开启压缩:对于存储到磁盘中的rdb快照文件,可以设置是否进行压缩,如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,推荐yes。

5、rdbchecksum:是否检查rdb备份文件的完整性。存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取最大的性能提升,可以关闭此功能。推荐yes。

三、触发RDB备份:

有几下几种方法

1、自动备份,需配置备份规则:

可在redis.conf中配置自动备份的规则,save用来配置备份的规则,save格式如下:

save 秒钟 写操作次数

如设置20秒内有最少有3次key发生变化则进行备份:save 20 3。 

默认规则为:默认是1分钟内修改了1万次,或5分钟内需修改了10次,或30分钟内修改了1次。

2、手动执行命令备份(save | bgsave):

有2个命令可以触发备份,

(1)save:save时只管保存,其他不管,全部阻塞,手动保存,不建议使用。

(2)bgsave:redis会在后台异步进行快照操作,快照同时还可以响应客户端情况。

可以通过 lastsave 命令获取最后一次成功生成快照的时间(获取到的是时间戳)。

动态停止RDB: redis-cli config set save "" #save后给空值,表示禁用保存策略。

3、flushall命令:

执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义。

四、RDB的备份恢复步骤:

1、先通过CONFIG GET dir查询rdb文件的目录,这其实就是查的redis.conf文件当中通过dir设置的目录

2、停止Redis
3、拷贝迁移的redis备份文件(dump.rdb)到CONFIG GET dir查询出来的指定目录下。

cp dump.rdb dump.rdb

4、重新启动redis服务

五、RDB优缺点:

1、优点:

(1)适合大规模数据恢复

(2)对数据完整性和一致性要求不高更适合使用

(3)节省磁盘空间

(4)RDB是一个紧凑压缩的二进制文件,Redis加载RDB恢复数据远远快于AOF的方式

2、缺点:

(1)Fork的时候,内存中的数据会被克隆一份,大致2倍的膨胀,需要考虑

(2)虽然Redis在fork的时候使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能

(3)RDB方式数据没办法做到实时持久化/秒级持久化在备份周期在一定间隔时间做一次备份,所以如果Redis意外down的话,就会丢失最后一次快照后所有修改

(4)RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题

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

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

相关文章

安防监控系统EasyCVR平台用户调用设备参数,信息不返回是什么原因?

安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,平台能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有…

刷题总结1.19

这句话是不正确的。当对链接队列进行出队操作时,front指针会发生变化。 链接队列是一种基于链表实现的队列数据结构。队列的特点是先进先出,即首先进队的元素将首先出队。在出队操作中,我们需要移动front指针,将其指向下一个元素…

【Linux常用命令——文件基本属性即权限操作】

Linux文件基本属性 显示文件属性 ls命令 Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。 语法: ls [参数]参数: -a 显示所有文件及目录 (. 开头…

解决字符串类型转数字类型相加结果异常问题

js字符串类型转换数字类型有七种方法,分别是parseInt(),parseFloat(),Math.floor(),乘以数字(*1),Number(),双波浪号 (~~number),一元运算符(number&#xff…

国标GB28181安防视频监控平台EasyCVR视频分享页增加精简模式

智慧安防平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷传输,可以兼容各品牌的IPC、NVR、移动…

被忽视的暗面:客户端应用漏洞挖掘之旅

被忽视的暗面:客户端应用漏洞挖掘之旅 前言 在2023年12月15日,我有幸参加了由“字节跳动安全中心”举办的“安全范儿”沙龙活动。作为“中孚信息元亨实验室”的一员,我被邀请分享名为“被忽视的暗面:客户端应用漏洞挖掘之旅”的…

【开源】基于JAVA语言的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

leetcode2312卖木头块

其实不难&#xff0c;主要是你得一眼看出来这个问题缩小规模然后就可以用DP来做了 using ll long long; class Solution { public:long long sellingWood(int m, int n, vector<vector<int>>& prices) {ll f[m10][n10];ll p[m10][n10];memset(p,0,sizeof p)…

使用 Vector 在 Kubernetes 中收集日志

多年来&#xff0c;我们一直在使用 Vector 在我们的 Kubernetes 平台中收集日志&#xff0c;并成功地将其应用于生产中以满足各种客户的需求&#xff0c;并且非常享受这种体验。因此&#xff0c;我想与更大的社区分享它&#xff0c;以便更多的 K8s 运营商可以看到潜力并考虑他们…

C# 图解教程 第5版 —— 第25章 反射和特性

文章目录 25.1 元数据和反射25.2 Type 类25.3 获取 Type 对象25.4 什么是特性25.5 应用特性25.6 预定义的保留特性25.6.1 Obsolete 特性25.6.2 Conditional 特性25.6.3 调用者信息特性25.6.4 DebuggerStepThrough 特性25.6.5 其他预定义特性 25.7 关于应用特性的更多内容25.7.1…

谷达冠楠科技:抖音开网店新手小白可以卖的产品

随着互联网的发展&#xff0c;越来越多的人选择在网上开设自己的店铺。而抖音作为目前最火的短视频平台&#xff0c;也提供了开店的功能。那么&#xff0c;对于新手小白来说&#xff0c;抖音开网店可以卖哪些产品呢? 我们可以考虑的是服装类商品。抖音上有很多时尚博主&#x…

【华为 ICT HCIA eNSP 习题汇总】——题目集1

1、&#xff08;多选&#xff09;根据下面所示的命令输出&#xff0c;下列描述中正确的是&#xff1f; A、GigabitEthernet0/0/1 允许VLAN1通过 B、GigabitEthernet0/0/1 不允许VLAN1通过 C、如果要把 GigabitEthernet0/0/1 变为 Access 端口&#xff0c;首先 需要使用命令“un…