[redis进阶一]redis的持久化(1)RDB篇章

目录

一 认识持久化

(1)先看总结图

(2)什么是持久化?

(3)redis是怎么进行持久化的呢

(4)简单分析一下RDB持久化和AOF持久化的不同

二  RDB持久化

(1)RDB的触发机制

(2)RDB的bgsave执行流程

(3)RDB文件的处理

(4)RDB的优缺点

(5)RDB效果演示板书

三  温习Linux文件系统


一 认识持久化

(1)先看总结图

(2)什么是持久化?

持久化是指将数据保存在持久存储介质(如硬盘、数据库)中,以确保数据在系统重启或关闭后仍然保持不变。持久化的概念通常应用在计算机领域,确保数据的长期存储和可靠性。在软件开发中,持久化可以是将数据写入文件、数据库或其他可靠的存储介质,而不是仅存在于内存中,以保证数据的持久性和可恢复性。

 总结:我们都知道内存有个特性就是掉电易失,而我们的redis就是内存级数据库,如果掉电状态那redis在内存中的数据是不是就丢失了,所以我们要把redis中内存数据保存在硬盘上去形成持久化存储,说大白话,就是数据保存在内存上不叫持久化,保存在硬盘上才叫持久化.

说到持久化就联想到我们MySQL数据库的事务中的四个特性了

  1. 原子性
  2. 一致性
  3. 持久性=>和持久化说的是一个意思
  4. 隔离性

(3)redis是怎么进行持久化的呢

redis为了保证速度快,数据肯定要在内存中,但是为了持久,数据还是要想办法存储在硬盘上~

所以redis决定在内存存数据,在硬盘上也存数据(这样的两份数据理论上来说是完全相同的,实际上存在小概率有差异,取决于咱们怎么实现持久化)

Redis ⽀持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。

  1. 介绍RDB、AOF的配置和运⾏流程,以及控制持久化的命令,如bgsave和bgrewriteaof。
  2. 对常⻅持久化问题进⾏分析定位和优化

总结:

在读取数据的时候直接从内存中读取

在插入新数据或修改的时候,需要把数据同时写到内存和硬盘(说是两边都写,但是实际怎么写硬盘还是有不同的策略可以保证整体的效率还是足够高)

硬盘上的数据是在redis重启的时候,用来恢复内存中的数据

(4)简单分析一下RDB持久化和AOF持久化的不同

总结:

RDB:定期持久化,比如每个月把我电脑上的学习资料,整体进行备份到备份盘里(叫B) ,然后删除旧备份(叫A),再把新备份名字改为旧备份的名字(A->B),这实际就是RDB过程中的一部分

AOF:实时持久化,只要我下载了一个新的学习资料,就立即把这个学习资料在备份盘里备份一份

二  RDB持久化

(1)RDB的触发机制

理论:RDB持久化是把当前redis进程数据⽣成快照保存到硬盘的过程,触发RDB持久化过程分为⼿动触发和 ⾃动触发。

⼿动触发分别对应save和bgsave命令:

  1. save命令:阻塞当前Redis服务器,直到RDB过程完成为⽌,对于内存⽐较⼤的实例造成⻓时间 阻塞,基本不采⽤。
  2. bgsave命令:Redis进程执⾏fork操作创建⼦进程,RDB持久化过程由⼦进程负责,完成后⾃动 结束。阻塞只发⽣在fork阶段,⼀般时间很短。
  3. Redis 内部的所有涉及RDB的操作都采⽤类似bgsave的⽅式。

除了⼿动触发之外,Redis运⾏⾃动触发RDB持久化机制,这个触发机制才是在实战中有价值的。

  1. 使⽤save配置。如"save m n"表⽰m秒内数据集发⽣了n次修改,⾃动RDB持久化。
  2. 从节点进⾏全量复制操作时,主节点⾃动进⾏RDB持久化,随后将RDB⽂件内容发送给从结点。
  3. 执⾏shutdown命令关闭Redis时,执⾏RDB持久化。

对于手动触发和自动触发的解读:

(2)RDB的bgsave执行流程

流程说明:bgsave 是主流的RDB持久化⽅式,下⾯根据图了解它的运作流程。

  1. 执⾏bgsave命令,Redis⽗进程判断当前进是否存在其他正在执⾏的⼦进程,如RDB/AOF⼦进 程,如果存在bgsave命令直接返回。
  2. ⽗进程执⾏fork创建⼦进程,fork过程中⽗进程会阻塞,通过infostats命令查看 latest_fork_usec 选项,可以获取最近⼀次fork操作的耗时,单位为微秒。
  3. ⽗进程fork完成后,bgsave命令返回"Backgroundsavingstarted"信息并不再阻塞⽗进程,可 以继续响应其他命令。
  4. ⼦进程创建RDB⽂件,根据⽗进程内存⽣成临时快照⽂件,完成后对原有⽂件进⾏原⼦替换。执⾏lastsave 命令可以获取最后⼀次⽣成RDB的时间,对应info统计的rdb_last_save_time选 项。
  5. 进程发送信号给⽗进程表⽰完成,⽗进程更新统计信息。

ps:fork()是Linux提供的系统调用,通俗来讲就是把父进程的PCB,地址空间,页表,文件描述符等复制一份给子进程,这样父进程中的内存数据子进程就得到了完全相同的一份,就可以进行持久化操作了

(3)RDB文件的处理

保存:RDB⽂件保存再dir配置指定的⽬录(默认/var/lib/redis/)下,⽂件名通过dbfilename 配置(默认dump.rdb)指定。可以通过执⾏configsetdir{newDir}和configsetdbfilename {newFilename} 运⾏期间动态执⾏,当下次运⾏时RDB⽂件会保存到新⽬录。

压缩:Redis默认采⽤LZF算法对⽣成的RDB⽂件做压缩处理,压缩后的⽂件远远⼩于内存⼤ ⼩,默认开启,可以通过参数configsetrdbcompression{yes|no}动态修改。

校验:如果Redis启动时加载到损坏的RDB⽂件会拒绝启动。这时可以使⽤Redis提供的redis check-dump⼯具检测RDB⽂件并获取对应的错误报告。

 板书:

(4)RDB的优缺点

  1. RDB是⼀个紧凑压缩的⼆进制⽂件,代表Redis在某个时间点上的数据快照。⾮常适⽤于备份,全量复制等场景。⽐如每6⼩时执⾏bgsave备份,并把RDB⽂件复制到远程机器或者⽂件系统中 (如hdfs)⽤于灾备。
  2. Redis加载RDB恢复数据远远快于AOF的⽅式(RDB以二进制进行存储,AOF以文本进行存储)。
  3. RDB⽅式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运⾏都要执⾏fork创建⼦进程,属于重量级操作,频繁执⾏成本过⾼。
  4. RDB⽂件使⽤特定⼆进制格式保存,Redis版本演进过程中有多个RDB版本,兼容性可能有⻛ 险。

(5)RDB效果演示板书

三  温习Linux文件系统

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

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

相关文章

uniapp日常总结--uniapp页面跳转方式

uniapp日常总结--uniapp页面跳转方式_uniapp 跳转-CSDN博客

《汽车电器与电子技术》实验报告

SRS系统结构原理与故障检测诊断 车辆上为什么要配安全气囊?——解析汽车被动安全的关键防线 一、安全气囊的核心作用:应对高速碰撞的“救命缓冲垫” 车辆在高速碰撞时(如正面碰撞、侧面碰撞),人体会因惯性以极高速度…

ffmpeg编解码器相关函数

文章目录 🎯 你需要理解的核心结构体:📦 常用函数及使用顺序(以解码为例)1️⃣ avcodec_find_decoder() / avcodec_find_encoder()2️⃣ avcodec_alloc_context3()3️⃣ avcodec_parameters_to_context()4️⃣ avcodec…

尚硅谷2019版Java网络编程笔记

第14章 网络编程 网络编程概述 什么是网络编程? 网络编程是通过网络协议实现计算机之间的数据交换。Java提供了强大的网络编程支持,隐藏了底层细节,开发者可以轻松实现网络通信。 网络编程的核心问题 如何定位网络上的主机:通…

解决【远程主机可能不符合 glibc 和 libstdc++ Vs code 服务器的先决条件】

可能是因为vscode不支持远程操作系统的版本,要么升级操作系统要么回退vscode版本 vscode回退1.97版本下载地址: 1.97版本VSCODE

forms+windows添加激活水印

formswindows添加激活水印 多语言水印文本,根据系统语言自动切换。水印显示在每个屏幕的右下角,位置动态调整。半透明灰色文字,微软雅黑字体。窗口无边框、置顶、透明背景,不干扰用户操作。支持多显示器。高DPI适配。 效果图&am…

LeetCode --- 444 周赛

题目列表 3507. 移除最小数对使数组有序 I 3508. 设计路由器 3509. 最大化交错和为 K 的子序列乘积 3510. 移除最小数对使数组有序 II 一、移除最小数对使数组有序 I & II 由于数组是给定的,所以本题的操作步骤是固定的,我们只要能快速模拟操作的过…

限流、降级、熔断、隔离?

在微服务架构中,服务限流、降级、熔断和隔离是保障系统高可用性的核心手段,但它们解决的问题和应用场景不同。以下是它们的区别、解决方案和实际案例的详细说明: 一、服务限流(Rate Limiting) 定义:通过限…

Day22 -php开发01--留言板+知识点(超全局变量 文件包含 数据库操作 第三方插件)

环境要求:php7.0.9 小皮 navicat phpstorm24.1 知识点:会写(留言板 留言板后台) 超全局变量 三方插件的使用 文件包含 1、开启小皮并利用navicat新建一个数据库 注意:本地的服务mysql关闭后 才可打开小皮。属…

制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)

AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…

LeetCode 解题思路 37(Hot 100)

解题思路: 初始化: 初始化最大举行 max 和栈 stack。左右补零: 考虑柱子递增的边界情况, 初始化填充柱状图 newHeights。遍历处理: 对于每一根遍历到的柱子 newHeights[i],若柱子高度小于栈口索引&#xf…

HTML — 过渡与动画

HTML过渡与动画是提升网页交互体验的核心技术,主要通过CSS实现动态效果。 过渡 CSS过渡(Transition)介绍 适用于元素属性变化时的平滑渐变效果,如悬停变色、尺寸调整。通过定义transition-property(过渡属性&#xf…

跨站请求是什么?

介绍 跨站请求(Cross-Site Request)通常是指浏览器在访问一个网站时,向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要,尤其是在涉及到“跨站请求伪造(CSRF)”和“跨域资源共享&#xff…

Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用

前言 重学Top10的第二篇,希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造,是一种由服务端发起的恶意请求,SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理,执行攻击者构造…

Hibernate:让对象与数据库无缝对话的全自动ORM框架

一、为什么需要全自动ORM? 在手动编写SQL的时代,开发者需要在Java代码和数据库表之间来回切换: // Java对象 public class User {private Long id;private String name;// getters and setters }// SQL语句 SELECT * FROM user WHERE id ?…

C语言超详细指针知识(一)

通过前面一段时间C语言的学习,我们了解了数组,函数,操作符等的相关知识,今天我们将要开始进行指针的学习,这是C语言中较难掌握的一个部分,一定要认真学习!!! 1.内存与地址…

程序化广告行业(70/89):ABTester系统助力落地页优化实践

程序化广告行业(70/89):ABTester系统助力落地页优化实践 在程序化广告领域摸爬滚打多年,深知持续学习和知识共享的重要性。写这篇博客,就是希望能和大家一起深入探索程序化广告行业,共同学习、共同进步。今…

项目管理(高软56)

系列文章目录 项目管理 文章目录 系列文章目录前言一、进度管理二、配置管理三、质量四、风险管理五、真题总结 前言 本节主要讲项目管理知识,这些知识听的有点意思啊。对于技术人想创业,单干的都很有必要听听。 一、进度管理 二、配置管理 三、质量 四…

常见的后缀名

.exe .exe(“executable”(可执行的))是 Windows 操作系统中最常见的可执行文件扩展名。此类文件包含了计算机能够直接运行的机器码指令。当用户双击 .exe 文件时,操作系统会读取其中的指令并执行相应的程序或任务。…

XILINX DDR3专题---(1)IP核时钟框架介绍

1.什么是Reference Clock,这个时钟一定是200MHz吗? 2.为什么APP_DATA是128bit,怎么算出来的? 3.APP :MEM的比值一定是1:4吗? 4.NO BUFFER是什么意思? 5.什么情况下Reference Clock的时钟源可…