redis持久化策略

redis中持久化策略

1.持久化是什么

在前面的过程中讲述了有关于MySQL中事务的一些特性以及隔离等级。其中很重要的一条就提到了持久化,持久化就是可以将数据进行一个持久保存的意思。也就是将数据写入到硬盘中,虽然,redis是操作内存的一个数据库,但是在每一次的操作中,比如往redis中写入一个数据,此时不止会在内存中进行一个操作,还会在电脑的硬盘中对相应数据做出一个备份。但平时的操作主要还是在内存中进行一个操作。但是,既然都涉及到往硬盘中写入数据了,肯定和redis快的特性在逻辑上是有一点不符的,所以我们介绍redis中的持久化策略

2.RDB

缩写为 Redis DataBase

定期备份,也就是Redis定期把内存中所有的数据给写入进硬盘,生一个一个"快照",下一次重启服务器之后,根据刚才生成的快照,将服务器的数据进行一个恢复

定期备份时间,手动备份redis中定期备份一种是 自动备份,一种是手动调用客户端中的 save和bgsave方法进行一个备份
但是在执行save的过程中,redis会尽可能的去生成一份快照,就会阻塞其他客户端的命令。所以这个操作是有一定风险的. 不太推荐使用

这里是redis配置文件中的操作:save seconds times 在规定时间之后 修改多少次才执行sava操作 比如save 60 10000 在60秒之后,同时还要修改1w次才进行一个保存,两个条件必须要同时满足 但是也有可能 在系统还没来得及备份的时候redis服务器就崩了,此时的解决方式就是我们后面讲的AOF,但也不能完全针对这个问题进行一个解决,同时系统配置文件也会在我们退出redis程序的过程中自动执行save命令(正常关闭),但是如果是异常重启,比如服务器直接挂掉,就会丢失未来得及登记快照的数据。



bg background bgsave是让redis在后台进行一个快照的生成,不会阻塞其他的线程的任务
 

bgsave执行过程

bgsave在创建快照的过程中,会现在操作系统中进行一个判断,判断是否已经有子进程在进行bgsave的操作了,要是有子进程已经在执行bgsave,则当前进程会直接进行返回,要是没有进程在进行bgsave操作的话,此时就会通过fork的方式来进行一个进程的创建, fork是linux系统提供的一个进程创建的api, fork的创建也很简单粗爆,直接把当前父进程的进程复制一份,一旦复制完成就是2个独立的进程了,也就能各种执行各自的任务了。

复制的过程中会复制 pcb 虚拟地址空间(内存中的内容) 文件描述符表 因此子进程和父进程中内存内容是相同的,此时让子进程去进行一个持久化,就等于把父进程的数据进行持久化了 父进程打开一个文件之后,会在内存中创建一个文件描述表的数据结构,子进程也会复制这个数据描述表,然后子进程也能使用父进程所打开的文件。 拷贝过程中采用的是“写时拷贝" 所以拷贝时并不会有很大开销的。


redis是单线程模型,但是此处redis是通过多进程的方式来完成并发编程的
自动备份 可以在redis的配置文件中配置每隔多长时间/每修改多少次数据就进行一次数据的修改。

3.AOF

缩写为Append Only File

实时备份

 会把用户的每一个操作都存储进入文件中,而不是保存具体的内容。并且开了AOF之后 RDB 就不生效了,按照AOF为准,启动的时候就不如读取RDB文件了

AOF进行持久化的操作,虽然会进行一个硬盘的写入,但对处理请求的速度,其实并没有太大影响的,因为在进行写入前,每一个操作都会进入一个缓冲区,直到缓冲区中内容达到一定量之后,才会统一的写入进硬盘中。大大的降低了写入硬盘的次数。

但是呢只要系统是非正常退出的,缓冲区的数据未来得及写入到硬盘上,然后程序又给挂掉了,此时缓冲区的数据也是会丢失的,所以说,在redis中,为我们提供了一些缓冲区的刷新策略。

  • 缓冲区刷新越快,性能影响也就越大,数据可靠性也就越高
  • 缓冲区刷新越慢,性能影响也就越小,但数据可靠性会降低很多

 随着AOF文件的增长,会增加redis的启动时间,因为redis启动之前会读取AOF文件,同时在AOF文件中,有很多的内容都是冗余的。

比如用户在redis中插入一个列表

  1.  lpush key 111
  2.  lpush key 222
  3.  lpush key 333 

其实等同于下面一个操作

  •  lpush key 111 222  333

 AOF记录的是中间的整个过程,但是redis关注的是最终的一个结果。
所以在redis中存在一个重写机制,来整理其中的冗余操作,从而达到给AOF文件瘦身的一个效果

AOF重写触发的时机

AOF和RDB类似,触发重写的时机分为手动调用和自动执行

手动调用 输入 bgrewriteaof

自动执行 在配置文件中进行配置

自动重写AOF的过程中,系统也会创建出一个子进程。
并且在重写AOF的过程中,系统不需要关心原来的AOF中都有什么,只需要将现有数据按照AOF的格式进行重写就行了。 
但是在父进程进行fork操作的时候,子进程负责进行AOF文件的重写,但是在子进程重写AOF文件的过程中,父进程还是会接受很多很多的请求的,这时的子进程是没办法实时获取到这些新增请求的,所以,父进程会在此时创建一个 aof_rewrite_buf的缓冲区,专门用来接受fork之后的请求AOF,在收到子进程已经成功重写AOF的消息时父进程在把aof_rewrite_buf的内容重新写入到新AOF文件中

要是在执行bgrewriteaof发现有子进程在执行创建快照的操作,则会进行一个等待,等快照创建完成在进行AOF的重写

要是在子进程重写AOF文件后,新AOF文件会取代旧文件,父进程依然往旧文件写入数据是否还有必要吗?这里还是非常有必要的 如果在写一半的过程中 服务器给挂掉了,子进程内存中的数据会丢失新的AOF文件还不完整。

总的来说 
具体那种备份还是得看具体的场景,因为AOF实时备份会有更多的开销,但是在现在计算机硬件的配置下AOF应该比RDB多一些。 

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

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

相关文章

智能合约开发基础知识:最小信任机制、智能合约、EVM

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看http://t.csdnimg.cn/fCD5E关于区块…

C++模版进阶

文章目录 C模版进阶1、非类型模版参数2、模版的特化2.1、概念2.2、函数模版特化2.3、类模版特化2.3.1、类模版全特化2.3.1、类模版偏特化 2.4、类模版特化示例 3、模版的分离编译3.1、 什么是分离编译3.2、模版的分离编译 4、模版总结 C模版进阶 1、非类型模版参数 模板参数分…

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

TCP相关特性

协议段格式 • 源/⽬的端⼝号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认号:后⾯详细讲; • 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15*460 • 6位标志位: ◦ URG:紧急指针是否有效 ◦ ACK:确认号是否有效…

如何使用ROS和easymqos快速搭建一辆语音控制导航的机器人

之前做的机器人小车基本都属于电脑或手机控制操作。目前,使用语音控制机器人小车运动,让机器人导航去指定地点,已经成为热门,并且语音识别技术已经有落地方案,可满足生活中的基本需要。有些语音芯片通过高算力处理器运…

【HBase入门与实战】一文搞懂HBase!

HBase入门与实战 目录 HBase入门与实战内容要点一、引入HBase二、了解NoSQL的概念三、NoSQL、BI、大数据的关系四、HBase概述五、HBase应用场景 内容要点 HBase的引入、定义和特点NoSQL数据库的概念和与关系型数据库的区别HBase的物理架构和逻辑架构HBase Shell的基本命令使用…

PHP异世界云商系统开源源码

系统更新与修复列表 1. 基于彩虹的二次开发 - 对彩虹系统进行了二次开发,增强了系统的功能和性能。2. 新增自定义输入框提示内容(支持批量修改) - 用户可以自定义输入框的提示内容,并支持批量修改,提升用户体验。3. 新…

劲仔食品三年倍增,抢先打响鹌鹑蛋“健康”属性品牌之争?

如果说,进入2024年后,在股价继续陷入回调状态的食品板块中有个股走势表现相对亮眼,那么劲仔食品必是其中之一。 从去年发布2023年三季度业绩公告以来,其强劲的业绩表现就带动了股价走出小趋势。2023年10月23日至今2024年3月13日收…

C#构建类库

类库程序集能将类型组合成易于部署的单元(DLL文件),为了使编写的代码能够跨多个项目重用,应该将他们放在类库程序集中。 一、创建类库 在C#中,构建类库是指创建一个包含多个类的项目,这些类可以被其他应用…

RocketMQ 面试题及答案整理,最新面试题

RocketMQ的消息存储机制是如何设计的? RocketMQ消息存储机制的设计原理: 1、CommitLog文件: 所有的消息都存储在一个连续的CommitLog文件中,保证了消息的顺序写入,提高写入性能。 2、消费队列: 为每个主…

Task-balanced distillation for object detection用于

Task-balanced distillation for object detection用于目标检测的任务平衡蒸馏 摘要 主流的目标检测器通常由分类和回归两个子任务组成,由两个并行头部实现。这种经典的设计范式不可避免的导致分类得分和定位质量(IOU)之间的空间分布不一致…

漫途桥梁结构安全监测方案,护航桥梁安全!

桥梁作为城市生命线的重要组成部分,承载着城市交通、物流输送、应急救援等重要职能。然而,随着我国社会经济的飞速发展,桥梁所承载的交通流量逐年增长,其安全性所面临的挑战亦日益严峻。例如恶劣的外部环境、沉重的荷载以及长期使…

python爬虫实战——抖音

目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面,获取视频 4、进入图文作品页面,获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver(Firef…

HarmonyOS NEXT应用开发—自定义视图实现Tab效果

介绍 本示例介绍使用Text、List等组件,添加点击事件onclick,动画,animationTo实现自定义Tab效果。 效果预览图 使用说明 点击页签进行切换,选中态页签字体放大加粗,颜色由灰变黑,起到强调作用,同时&…

揭示数据在内存中存储的秘密!

** ** 悟已往之不谏,知来者犹可追 ** ** 创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 整数在内存中的存储 整数的表达方式有三种:原码、反码、补码。 三种表示方法均有符号位和数值位两部分…

Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

Oracle数据库:使用 bash脚本 定时任务 自动备份数据 1、前言2、为什么需要自动化备份?3、编写备份脚本4、备份脚本授权5、添加定时任务6、重启 crond / 检查 crond 服务状态7、备份文件检查 💖The Begin💖点点关注,收…

torch.backends.cudnn.benchmark 作用

相关参数 torch.backends.cudnn.enabled torch.backends.cudnn.benchmark torch.backends.cudnn.deterministictorch.backends.cudnn.benchmark True:将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法&#xff0c…

力扣59. 螺旋矩阵 II

思路:此题思路就是绕圈遍历,全靠条件处理技巧,重点要清楚的就是循环不变量:左闭右开(即拐弯处的一个数,留给第二行处理) 以下是代码随想录的作者的一张图片,每次for循环,…

Docker容器化技术(使用Docker搭建论坛)

第一步:删除容器镜像文件 [rootlocalhost ~]# docker rm -f docker ps -aq b09ee6438986 e0fe8ebf3ba1第二步:使用docker拉取数据库 [rootlocalhost ~]# docker run -d --name db mysql:5.7 02a4e5bfffdc81cb6403985fe4cd6acb0c5fab0b19edf9f5b8274783…

深入浅出计算机网络 day.2 概论⑥ 计算机网络体系结构

上帝疯狂杜撰世界悲情的命题 将凉薄和荒芜尽写 —— 24.3.13 内容概述 1.常见的三种计算机网络体系结构 2.计算机网路体系结构分层的必要性 3.计算机网络体系结构分层思想举例 4.计算机网络体系结构中的专用术语 一、常见的三种计算机网络体系结构 1.OSI参考模型 …