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多一些。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element-plus怎么修改表单中的label字体颜色及大小

问题描述: 当我们在vue3中使用element-plus组件库提供的表单组件时,有时我们需要修改表单中label的字体颜色等属性,这是如果直接选中label的class进行修改是不起作用的,我们只需深度选择即可选中并进行修改。 比如: …

PS学习-抠图-蒙版-冰块酒杯等透明物体

选中图,ctrlA 全选 ctrlC复制 创建一个蒙版图层 选中蒙版Alt 点击进入 ctrlv 复制 ctrli 反转 原图层 ctrldelete填充为白色 添加一个背景,这个方法通用 首选创建一个 拖到最底部 给它填充颜色 这个可能是我图片的原因。视频是这样做的

力扣L10--- 3. 无重复字符的最长子串--2024年3月14日

1.题目 2.知识点 注1:containsKey 是 Java 中 HashMap 类的一个方法,用于检查哈希表中是否包含指定的键。 注2:在哈希表(HashMap)中,每个键对应着唯一的值,因此键不能重复,但值可以重复。 (1)创…

公众号留言功能恢复了,你的开通了吗?

了解公众号的人都知道,腾讯在2018年3月宣布暂停新注册公众号的留言功能,这之后注册的公众号都不具备留言功能。 这成了很多号主运营人的一块心病,也包括我。 没有留言,就好似一个人玩单机游戏,无法与读者互动&#xff…

数据资产管理解决方案:构建高效、安全的数据生态体系

在数字化时代,数据已成为企业最重要的资产之一。然而,如何有效管理和利用这些数据资产,却是许多企业面临的难题。本文将详细介绍数据资产管理解决方案,帮助企业构建高效、安全的数据生态体系。 一、引言 在信息化浪潮的推动下&a…

DVWA-File Upload文件上传

什么是文件上传漏洞? 黑客利用文件上传后服务器解析处理文件的漏洞上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。 造成文件上传漏洞的原因: 1.服务器配置不当 2.开源编辑器上传漏洞 3.本地文件上传限制被绕过 4.过滤不严格被…

【C语言】分支语句(逻辑运算符与关系运算符)

文章目录 **逻辑运算符(&&、||、!)**逻辑运算符特点短路短路-逻辑与短路-逻辑或 **关系运算符(relational expression)**运算操作符的结合律、运算符 **选择结构/分支结构****if 语句****复合句的if语句(if...else..语句)****不良风格的程序** *…

使用Loadrunner进行性能测试

一、确定性能测试的范围、要求、配置、工具等 明确测试的系统: 本文档主要指的是web应用。 明确测试要求: 用户提出性能测试,例如,网站首页页面响应时间在3S之内,主要的业务操作时间小于10s,支持300用户在…

【触想智能】嵌入式工控一体机在交通监控管理上的应用分析

随着现代交通网络和技术的不断发展,高速公路的建设已经成为国家重点工程之一。然而,如何确保高速公路的安全驾驶则成为了一个长期亟待解决的问题。 为了提高高速公路的交通管理效率,嵌入式工控一体机被广泛应用于高速公路的联合监控管理系统中…

《古滇传说水龙吟》敖诀扮演者李亚云

2024年2月28日,演员李亚云参演新剧古滇传说原创系列剧第一部《水龙吟》在浙江横店影视城开机拍摄。该剧由中共昆明市西山区委宣传部、石林县委宣传部、昆明滇池国家旅游度假区管委会文旅投促局、云南民族电影制片厂、云南卫视、昆明影视拍摄服务中心支持&#xff0c…

[RAM] RAM 突发传输(Burst ,Burst size, length) | Burst 读写过程与时序 精讲

主页: 元存储博客 文章目录 前言1. Burst 基本概念含义Burst Width &Burst Length 2. CPU Burst mode3. 总线 burst mode总线的仲裁总线突发传输时序 4. Burst Chop (突发终止)5. Burst Mode 应用什么时候用突发模式 总结 前言 在DMA(直接内存访问&…

java基础-异常、常用类

异常 Exception 如果程序员认为一段代码可能出现异常/问题,try-catch异常处理机制来解决,从而保证程序的健壮性。将该代码块–》选中–》快捷键 ctrlaltt–》选中 try-catch 常见的一些异常~ 异常体系图,体现了继承和实现关系。&#xff08…

ubuntu 安装 infiniband 和 RoCE 驱动

下载驱动程序 驱动程序地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 安装 安装参考文档 https://docs.nvidia.com/networking/display/mlnxofedv24010331/installing+mlnx_ofed#src-2571322208_InstallingMLNX_OFED-InstallationProced…

调皮的String及多种玩法(上部)

👨‍💻作者简介:👨🏻‍🎓告别,今天 📔高质量专栏 :☕java趣味之旅 欢迎🙏点赞🗣️评论📥收藏💓关注 💖衷心的希…

通过actions configuration tool进行快速open 软件的定义

这个主要是看到有人可以直接在文件夹中右键打开terminator得到的启发: 首先需要下载工具 sudo apt-get install nautilus-actions下载terminator: sudo apt-get install terminator去软件目录寻找filemanager-action 然后新建一个action&#xff0c…

简单的网页制作

1网页编写格式 <!DOCTYPE html> <html><head><meta charset"utf-8"> <title>中文测试。。。。</title></head><body>这里是测试body测试内容。。。</body> </html>2标签 在body内<h1></h1&…

平衡树——treap

treap实际上就是tree(BST&#xff0c;二叉搜索树)heap(堆) 我们维护一个二叉树来储存值&#xff0c;但是为了避免二叉树由于值太特殊变成链式结构&#xff0c;我们对于每个点加入一个val值&#xff0c;这个是随机值&#xff0c;我们通过这个随机值来维护一个大根堆(只与val有关…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人…

Android Studio实现内容丰富的安卓宠物用品商店管理系统

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.系统公告 3.宠物社区&#xff08;可发布宠物帖子&#…

ts的interface和type区别

1. 场景 interface 是用来描述对象类型的结构&#xff0c;可以定义对象的属性名和属性值的类型&#xff0c;也可以定义函数类型。interface User {name: string;age: number;sayHello(): void; } const user: User {name: "",age: 2,sayHello() {...} }可以用这个U…