【Redis】Redis持久化策略

news2024/11/24 13:54:33

目录

  • 策略
  • RDB
    • bgsave执行流程
    • RDB效果演示
    • RDB优缺点
  • AOF
    • AOF缓冲区刷新策略
    • AOF的重写机制
      • AOF重写机制的触发机制
      • AOF重写流程
  • 混合持久化
  • 同时存在aof和rdb快照,以谁为主?
  • 信号

策略

  1. RDB => Redis DataBase 相当于定期的方式实现持久化
  2. AOF => Append Only File 相当于实时的方式实现持久化

RDB

RDB定期的把我们Redis内存中的所有数据,都写入硬盘中,生成一个“快照”
Redis给内存中当前存储的这些数据,赶紧拍个照片,生成一个文件,存储在硬盘中~~
后续Redis一旦重启了,就可以根据刚才的“快照”就能把内存中的数据给恢复回来~

“定期”具体来说,又有两种方式:
1.手动触发.
程序员通过redis客户端,执行特定的命令,来触发快照生成
save
bgsave
2.自动触发.
在Redis配置文件中,设置一下,让Redis每隔多长时间/每产生多少次修改就触发。

save:执行save的时候,redis就会全力以赴的进行“快照生成”操作,此时就会阻塞redis的其他客户端的命令~导致类似于keys*的效果
一般不建议使用save
bgsave:bg=>background 不会影响Redis服务器处理其他客户端的请求和命令
Redis咋做到的?是不是搞了个多线程啥的?
并非如此!!
并发编程的场景.此处redis使用的是“多进程”的方式,来完成的并发编程,来完成的bgsave的实现。

bgsave执行流程

在这里插入图片描述
1.判断当前是否存在其他正在工作的子进程。
比如现在已经有一个子进程正在执行bgsave,此时就直接把当前的bgsave返回~
2.如果没有其他的工作子进程,就通过fork这样的系统调用创建一个子进程来~

fork是linux系统提供的一个创建子进程的api(系统调用)
fork创建子进程,简单粗暴,直接把当前的进程(父进程)复制一份,作为子进程~
一旦复制完成了,父子进程就是两个独立的进程,就各自执行各自的了~~

3.子进程负责进行写文件,生成快照的过程.
父进程继续接收客户端的请求,继续正常提供服务.
4.子进程完成整体的持久化过程之后,就会通知父进程,干完了,父进程就会更新一些统计信息,子进程就可以结束销毁了。

RDB效果演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
rdb文件中的数据,不是你这边插入了数据,就会立即更新的!!
在这里插入图片描述
在这里插入图片描述
1.手动执行save&bgsave触发一次快照
在这里插入图片描述
由于我们的数据比较少,执行bgsave瞬间就完成了,立即查看应该就是有结果的.如果以后我们接触的数据多了,执行bgsave就可能需要消耗一定的时间,立即查看不一定就是生成完毕了~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过上述操作,就可以看到,redis服务器在重新启动的时候,加载了rdb文件的内容,恢复了内存中之前的状态。
2.插入新的key,不手动执行bgsave

在这里插入图片描述
在这里插入图片描述
发现没有,重新启动redis服务器
在这里插入图片描述

在这里插入图片描述
发现就有了,redis生成快照操作,不仅仅是手动执行命令才触发,也可以自动触发!!
1)通过刚才配置文件中save执行M时间内,修改N次
2)通过shutdown命令(redis里的一个命令)关闭redis服务器,也会触发。
3)redis进行主从复制的时候,主节点也会自动生成rdb快照,然后把rdb快照文件内容传输给从节点

如果是通过正常流程重新启动redis服务器,此时redis服务器会在退出的时候,自动触发生成rdb操作,但是如果是异常重启(kill -9 或者 服务器掉电)此时redis服务器来不及生成rdb,内存尚未保存到快照中的数据,就会随着重启而丢失~

3.bgsave操作流程是创建子进程,子进程完成持久化操作.
持久化会把数据写入新的文件中,然后使用新的文件替换旧的文件.

在这里插入图片描述
liunx文件系统.
文件系统典型的组织方式(ext4)主要是把整个文件系统分成了三个大的部分
1.超级块(放的是一些管理信息)
2.inode区(存放inode节点,每个文件都会分配一个inode数据结构,包含了文件的各种元数据)
3.block区,存放文件的数据内容了。
4.通过配置自动生成rdb快照
执行FLUSHALL也会清空rdb文件
在这里插入图片描述
5.如果把rdb文件,故意改坏了,会咋样?
手动的把rdb文件内容改坏.
然后一定是通过kill进程的方式,重新启动redis服务器.
如果通过service redis-server restart重启,就会在redis服务器退出的时候,重新生成rdb快照。
就把咱门刚才改坏了的文件给替换了~~

在这里插入图片描述

RDB优缺点

  • RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照。非常适用于备份,全量复制等场景,比如每6小时执行bgsave备份,并把RDB文件复制到远程机器或者文件系统中用于灾备。
  • Redis加载RDB恢复数据远远快于AOF的方式。
  • 在这里插入图片描述

  • RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork创建子进程,属于重量级操作,频繁执行成本过高。
  • RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个RDB版本,兼容性可能有风险。
  • AOF

    类似于mysql的binlog,就会把用户的每个操作,都记录到文件中。

    当redis重新启动的时候,就会读取这个aof文件中的内容,用来恢复数据~

    开启aof的时候,rdb就不生效了~
    启动的时候不再读取rdb文件内容了~

    aof默认一般是关闭状态,修改配置文件,来开启aof功能~
    在这里插入图片描述
    AOF是一个文本文件.
    每次进行的操作,都会被记录到文本文件中~
    在这里插入图片描述

    通过一些特殊符号作为分隔符,来对命令的细节做出区分~

    AOF缓冲区刷新策略

    在这里插入图片描述
    实际上,是没有影响的!并没有直接影响到redis处理请求的速度~
    1.AOF机制 并非是直接让工作线程把数据写入硬盘,而是先写入一个内存中的缓冲区,积累一波之后,再统一写入硬盘
    2.硬盘上读写数据,顺序读写的速度是比较快的
    随机访问则速度是比较慢的。
    AOF是每次把新的操作写入到原有文件的末尾,属于顺序写入~

    如果把数据写入到缓冲区里,本质还是在内存冲呀~
    万一这个时候,突然进程挂了,或者主机掉点了,咋办?是不是缓冲区中的数据就丢了??
    是的!!缓冲区中没来得及写入硬盘的数据是会丢的~

    redis给出了一些选项,让程序员,根据实际情况来决定怎么取舍~缓冲区的刷新策略 ~
    刷新频率越高,性能影响就越大,同时数据的可靠性就越高.
    刷新频率越低,性能影响就越小,同时数据的可靠性就越低.

    AOF的重写机制

    AOF文件持续增长,体积越来越大~
    会影响到,redis下次启动的启动时间~
    redis启动的时候要读取aof文件的内容

    注意!!上述aof中的文件,有一些内容是冗余的!

    redis存在一个机制,能够针对aof文件进行整理操作。这个整理就能够剔除其中的冗余操作,并且合并一些操作,达到给aof文件瘦身这样的效果。 重写机制~

    AOF重写机制的触发机制

    1. 手动触发:调用bgrewriteaof命令
    2. 自动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机

    AOF重写流程

    在这里插入图片描述
    创建子进程fork
    父进程仍然负责接收请求.
    子进程负责针对aof文件进行重写~

    注意!重写的时候,不关心aof文件中原来都有啥~
    只关心内存中最终的数据状态~

    子进程只需要把内存中给当前的数据,获取出来,以AOF的格式写入一个新的AOF文件中!!

    此处子进程写数据的过程,非常类似于RDB生成一个镜像快照~
    只不过RDB这里是按照二进制的方式生成的
    AOF重写,则是按照AOF这里要求的文本格式来生成的.

    子进程写新aof文件的同时,父进程仍然在不停的接收客户端新的请求。
    父进程还是会写把这些请求产生的AOF数据写入到缓冲区,再刷新到原有的AOF文件里~
    在这里插入图片描述
    子进程这边,把aof数据写完之后,会通过信号通知一下父进程,父进程再把aof_rewrite_buf缓冲区中的内容也写入到新AOF文件里~

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    混合持久化

    AOF本来是按照文本方式来写入文件的.
    但是文本的方式写文件,后续加载的成本是比较高的~
    redis就引入了“混合持久化”的方式,结合了rdb和aof的特点~
    按照aof的方式,每一个请求/操作,都记录入文件。在触发aof重写之后,就会把当前内存的状态按照rdb的二进制格式写入到新的aof文件中。
    后续再进行的操作,仍然是按照aof文本的方式追加到文件后面。在这里插入图片描述
    这个选项为yes就是开启混合持久化。

    同时存在aof和rdb快照,以谁为主?

    在这里插入图片描述
    以aof为主!

    信号

    信号这个东西,可以认为是Linux的神经系统~
    进程之间的互相作用
    但是Java生态并不鼓励使用多进程模型编程~

    信号能表达的信息有限,并非像socket这样的方式可以传输任意的数据~
    因此,像上述父子进程场景中,子进程表达“我干完了”

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

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

相关文章

Python网络编程改良版客户端

在《Python中套接字实现客户端和服务端3-3》中提到,客户端可以通过connect()方法连接服务端,而连接成功的前提是服务端在必须客户端连接之前就要等待连接。 1 当客户端连接时,服务端没有打开 如果客户端连接服务端时,服务端并没…

通过商品ID查询淘宝商品详情数据,可以拿到商品标题,商品价格,商品库存,商品销量,商品sku数据等,淘宝API接口

通过商品ID查询淘宝商品详情数据可以参考以下步骤: 进入淘宝网站,搜索需要查询的商品ID,例如:652874751412。复制该商品的ID号。点击获取请求key和secret地址,请求参数为num_iid商品ID&is_promotion1。发送请求&a…

企业立案信息API的优势与应用场景

引言 随着科技的不断进步,创业者和企业家们在创办新企业时愈发依赖数字化工具。其中,企业立案信息API成为了一项重要的资源,它提供了有关企业立案的关键信息,为企业家们提供了许多优势和丰富的应用场景。本文将探讨企业立案信息A…

【API篇】四、物理分区算子API

文章目录 1、 分区算子:随机分区2、分区算子:轮询分区3、分区算子:重缩放分区4、分区算子:广播5、分区算子:全局分区6、自定义分区 重分区,即数据"洗牌",将数据分配到下游算子的并行子…

【日志与守护进程】

文章目录 1 :peach:日志:peach:1.1 :apple:对日志的基本理解:apple:1.2 :apple:对日志系统代码的基本编写:apple:1.2.1 :lemon:messageLog.hpp:lemon:1.2.2 :lemon:tcpServer:lemon: 1.3 :lemon:验证:lemon: 2 :peach:守护进程:peach:2.1 :apple:进程组与会话:apple:2.2 :apple…

Rabbitmq 的管理配置

1、Rabbitmq管理 1.1、多租户与权限 每一个RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host) ,简称为vhost 。每一个vhost 本质上是一个独立的小型RabbitMQ 服务器,拥有自己独立的队列、交换器及绑定关系等,井且它…

用PHP爬取视频代码示例详细教程

以下是一个使用Symfony Panther和PHP进行爬虫的示例程序&#xff0c;用于爬虫企鹅上的视频。请注意&#xff0c;这个示例需要使用https://www.duoip.cn/get_proxy这段代码获取爬虫IP。 <?php // 引入所需的库 require vendor/autoload.php;use Symfony\Component\Panther\P…

多媒体应用设计师 第7章 多媒体数字压缩编码技术基础

1.多媒体数据压缩技术理论基础及压缩编码方法分类 必要性:大数据量的图像信息会给存储器的存储容量&#xff0c;通信线路的带宽&#xff0c;以及计算机的处理速度增加极大压力。如果没有多媒体编码压缩技术的发展&#xff0c;大容量图像&#xff0c;视频信息的存储和传输就难以…

林旅强 | AI+开源时代 - 开发者与治理者的机遇与挑战

点击以下链接收听本期 “大咖访谈” 播客&#xff0c;与大咖面对面&#xff1a; 大咖访谈链接&#xff1a;EP15&#xff1a;林旅强 | AI开源时代 - 开发者与治理者的机遇与挑战 刘天栋&#xff1a;访谈主持&#xff0c;开源雨林顾问&#xff0c;开源社联合创始人&#xff0c;Ap…

人工智能应该怎么学?

人工智能这个词炙手可热&#xff0c;为了跟上时代的步伐&#xff0c;有许多小伙伴就想学习人工智能&#xff0c;今天来介绍一下人工智能究竟是什么&#xff1f;应该怎么学&#xff1f;怎么入门&#xff1f; 首先来看一下什么是人工智能&#xff1f; 人工智能 人工智能 人工智能…

puppeteer学习笔记

目录 介绍启动方法功能一、爬虫优势如何实现爬虫小demo 功能二、执行脚本百度搜索脚本demo 功能三、获取cookie&#xff08;这个只能是模拟浏览器当前进入网页的cookie不是平时用的下载的的浏览器的cookie&#xff09;功能四、监控网页&#xff0c;进行性能分析 介绍 puppetee…

文旅部发布《旅游电子合同管理与服务规范》,推动旅游企业转型升级

日前&#xff0c;文化和旅游部批准发布了旅游电子合同领域的行业标准《旅游电子合同管理与服务规范》&#xff08;以下简称《标准》&#xff09;&#xff0c;将于2023年12月9日起实施。 《标准》聚焦旅游电子合同的适用范围、基本要素、操作规范、载体要求、安全保密等方面进…

【编译原理】对++*p++操作理解

目录 1. 代码段执行结果 2. *p的结合过程 3. 通过汇编代码判断执行结果 1. 代码段执行结果 对于以下代码&#xff1a; int main() { int i 0;int *p &i; *p ; return i; }输出结果为&#xff1a; ASM generation compiler returned: 0 Execution build compiler re…

隐写术--python隐写

0x00 背景 何为隐写术&#xff1f; 隐写术是一类可以隐藏自己写的一些东西的方法&#xff0c;是一门关于信息隐藏的技巧与科学。指的是采取一些不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容的方法。 可参考 一文让你完全弄懂Stegosaurus - 知乎 本文要…

机械设计中的结构要素、基本要求和准则

机械结构设计的任务是依据设计任务在总体设计构想的基础上&#xff0c;确定的原理方案&#xff0c;绘制出具体的结构图&#xff0c;以实现设计所要求的功能。设计的过程是将抽象的工作原理具体化为某类构件或零部件&#xff0c;包含确定结构件的材料、形状、尺寸、公差、热处理…

机器学习绪论

目录 第1关&#xff1a;什么是机器学习 相关知识 题目答案 第2关&#xff1a;机器学习的常见术语 相关知识 假设空间 归纳偏好 题目答案 第3关&#xff1a;机器学习的主要任务 相关知识 分类 回归 聚类 题目答案 第1关&#xff1a;什么是机器学习 相关知识 相信…

给你一个文件夹,统计其下面的文件数量,包括子文件夹下面的文件

对于统计一个文件夹下面的文件的数量&#xff0c;大家第一反应肯定是递归调用来实现&#xff0c;现在有这么一个目录结构&#xff1a;root1和root2下面各有一个文件file1.txt和file2.txt&#xff0c;所以最终统计出来的文件数量应该是3 我们先看看递归实现&#xff1a; public …

Plant Commun | 正交组、系统转录组和CUT-Tag发掘植物保守冷响应因子BBX29及其靶基因

植物以固着的方式生活&#xff0c;但它们并不完全被动&#xff0c;许多温带植物通过预暴露于非冻结低温来增加它们的抗冻性&#xff0c;这种适应性过程被称为冷驯化(CA)。越来越多的证据表明&#xff0c;低温下的许多生理和代谢变化是由于CA诱导的冷反应(COR)基因的表达。C-重复…