【Redis】Redis持久化模式RDB
目录
引子
RDB
RDB的优缺点
小节一下
引子
不论把Redis作为数据库还是缓存来使用,他肯定有数据需要持久化,这里我们就来聊聊两种持久化机制。这两种机制,其实是 快照 与 日志 的形式。
快照:就是当前数据的备份,我可以拷贝到磁盘,也可以拷贝到别的服务器,如此一来,万一现有redis的计算机节点被恶意攻击或者被人删库跑路,那么你的原有数据还是可以恢复的。像你的云服务器也有快照功能,被人攻击以后直接拿来恢复就行。
日志:其实就类似于我们开发系统的时候用户的操作日志,这里指的是用户的每次写操作日志比如增加key,修改key以及删除key,这些命令都会记录下来形成一个日志文件。那么在需要恢复的时候,只需要执行这个日志文件里的所有命令,就能达到恢复数据的目的。
RDB
RDB就相当于上面的快照形式,是全量备份,这个备份数据里都是二进制文件,也是Redis的默认备份方案。当redis恢复的时候会全量的恢复,此时redis处于阻塞状态。
如上图,这个 dump.rdb 就是当前redis的备份快照数据。你可以尝试把他复制到一个新的redis下,然后启动观察数据是否一致。这个RDB就是在redis启动的时候,他发现有这个rdb,就会载入到内存也就是恢复数据。需要注意,redis启动的时候,如果rdb文件很大,那么会阻塞,直到数据全部
恢复到内存里。
RDB是每隔一段时间做备份的机制。如果因为服务器宕机死机重启,那么内存中的数据就没了,但是redis他会随着linux启动而启动,会从rdb中进行回复。
RDB是每隔一段时间进行备份的,那么我们来看如下图,思考一下:
上图中,Redis会备份RDB到磁盘,那么备份到磁盘的过程是会耗时的,内存中redis的数据越多越大,比如8g内存中有4g都是redis数据,那么在备份到磁盘的时候会有传输过程,有一定的时间损耗,可能几十秒也有可能1分钟多,这个RDB快照并不是瞬间产生的。那么这个时候就有问题了,假设现在是凌晨1点开始备份,由于有时间损耗,01点钟05分产生了RDB文件保存到磁盘,那么会如下问题,到底是哪种:
1.这个RDB文件的内容是凌晨1点的数据?
2.这个RDB文件内容是01点钟01分的数据?
3.这个RDB文件内容是凌晨1点的数据,并且记录了开始备份到结束(1点到1点01分之间)的数据?
其实是这样,redis有两种方式,一个是 save 命令,一个是 bgsave 命令。
save:备份rdb到磁盘,阻塞当前进程,redis不接受任何写操作.
bgsave:fork(创建)一个新的子进程,子进程把rdb数据写入磁盘,写操作由父进程去处理两个进程之间数据隔离,所以rdb的数据不会因为有新的写操作而发生变化。父进程相当于是老板,子进程相当于是手下员工,职能不一样,相互隔离,fork:新的子进程指向的缓存数据和redis父进程一致,所以速度很快。(redis是C语言开发的,本质是指针,指向地址,而不是复制一个新的数据,所以父进程有新的写操作是写到新的内存地址,而子进程指向的地址不变)
所以,最终的数据其实就是凌晨一点的数据.
提问:既然bgsave这么好用,为啥还设计一个save命令呢?
不论是开发游戏还是普通的项目,肯定会有维护期,那么在维护期的时候,就会用到save,直接阻塞,不让新的数据写入,游戏项目是最常见的,直接停服了,所有玩家等着新版本上线后才能重新进
RDB 自动保存机制
如上图,redis的核心配置有这么一段内容,这个是触发bgsave的条件,他是自动的,满足条件就会执行rdb的备份。(要注意,它是 bsave)
如果900秒内发生1次更新,则备份rdb
如果300秒内发生10次更新,则备份rdb
如果60秒内发生10000次更新,则备份rdb
RDB的其他配置
-
stop-writes-on-bgsave-error
-
yes:如果save过程出错,则停止写操作
-
no:可能造成数据不一致
-
-
rdbcompression
-
yes:开启rdb压缩模式
-
no:关闭,会节约cpu性能开支
-
-
rdbchecksum
-
yes:使用CRC64算法校验对rdb进行数据校验,有10%性能损耗
-
no:不校验
-
-
dbfilename:rdb的默认名称,可以自定 dump.rdb
RDB的优缺点
优点:
*每隔一段时间备份,全量备份,比较适合做冷备。
*灾备简单,可以远程传输到其他服务器,再做恢复
*子进程备份的时候,主(父)进程的写操作可以和子进程隔离,数据互不影响,保证备份数据的的完整性
*相对AOF来说,当有更大文件的时候可以快速重启恢复,恢复速度比较快
缺点
*发生故障时,有可能会丢失最后一次的备份数据
*子进程会有一定的内存消耗,尤其是当有大量新的写操作涌入的时候,那些都会有额外的内存开支
*由于定时全量备份是重量级操作,所以对于实时备份的业务场景,就不适用了
附:关于父子进程对内存的消耗(基于Linux的Fork:copy-on-write)
redis在fork一个子进程的时候,会消耗内存,父子进程在内存上的占用量的表现是一致的,注意这里是表现,并不是说完全的拷贝一份新的内存数据进行备份,如果有10g数据,他也不会完全再复制10g,总共20g,那得多大开销?实际上linux有一个写时复制的技术,copyon write ,就是父子进程共同指向相同的内存地址,数据是一致的。如果父进程处理新的写操作,那么他会复制一个新的副本来进行操作,而子进程他还是处理的当时fork时的快照数据,所以父子进程之间相互不影响,需要注意,早期的fork,子进程会完全拷贝父进程的所有数据状态等内容,这个在如今是灾难性的。
如今的fork是依托操作系统所提供的 copy-on-write 机制。
小节一下
RDB机制适合大量数据的恢复,但是数据的完整性和一致性可能会不足。所以就需要有后续的AOF机制来互补。
相关文章:
【Redis】Redis持久化模式RDB
目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用,他肯定有数据需要持久化,这里我们就来聊聊两种持久化机制。这两种机制,其实是 快照 与 日志 的形式。快照:就是当前数据的备份,我可以拷贝到磁…...
Java基础 - 模拟医院挂号系统
模拟医院挂号系统功能 1. 科室管理:新增科室,删除科室(如果有医生在,则不能删除该科室),修改科室 2. 医生管理:录入医生信息以及科室信息,修改医生信息(主要是修改个人…...
【论文精读】基于知识图谱关系路径的多跳智能问答模型研究
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
uni app 微信小程序微信支付
使用方法 接口传参 使用wx.requestPayment方法是一个统一各平台的客户端支付API,不管是在某家小程序还是在App中,客户端均使用本API调用支付...
Dgraph 入门教程一《 概览》
1、Dgraph的特点 (1) 分布式规模:可以发布和处理大量数据 (2)支持GraphQL:一种内置的查询语法,类似SQL。可以让数据操作起来更简单 (3)完全的事务处理和ACID兼容:满足OLTP工作负载,该负载要求频繁的插入和更新数据。 (4)支持多…...
VSCode安装
前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器,支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…...
STM32各外设初始化步骤
1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…...
10. Nginx进阶-Return
简介 什么是Return? nginx的return指令是用于在nginx配置文件中进行重定向或返回特定的HTTP响应码的指令。 它可以根据不同的条件来执行不同的操作,如重定向到其他URL、返回指定的HTTP响应码或自定义响应内容等。 Return适用范围 return指令只能在se…...
Nircmd集成定时执行专家之后的使用场景
Nircmd工具拥有了定时执行功能之后,可以用于以下场景: 1. 自动化日常工作 定时清理系统垃圾文件定时备份重要文件定时关闭或重启电脑定时发送邮件或短信定时执行其他程序或脚本 2. 监控系统状态 定时检查系统温度定时检查磁盘空间定时检查网络连接定时…...
Java面试题【必知必会】Linux常用命令面试题(2024)
近期一直在准备面试,所以为了巩固知识,也为了梳理,整理了一些java的基础面试题!同时也希望各位英雄和女侠能够补充!不胜荣幸!!! 名称地址Java面试题【必知必会】基础(202…...
元宇宙融合多功能气膜馆:开启娱乐与文化的数字新纪元
多功能气膜馆和元宇宙的结合,标志着娱乐和文化领域进入了全新的时代。元宇宙作为数字化空间的前沿概念,正在逐渐渗透到人们的日常生活中。而多功能气膜馆作为一种创新的场馆模式,则为人们提供了更为丰富多彩的娱乐和文化体验。这种融合不仅将…...
微信小程序本地开发
微信小程序本地开发时不需要在小程序后台配置服务器域名直接在小程序项目中填写后端在本机的IP地址和端口号 如图(第一步) 填写地址后发现报错,url不是合法域名,则在详情设置不校验合法域名 如图(第二歩)…...
2024火爆全网系列,原来RocketMQ中间件可以这么玩
前言 做了 3~5 年编程开发,你已经积累了不少项目经验,扩宽了技术广度,也许已发力成为团队管理者。到了这个阶段,大家却常有这种感受:感觉自己卡在瓶颈进步缓慢,技术水平很难像早期一样实现大幅突破&#x…...
2024阿里、网易、京东等大厂最新Java面试题,一举拿下腾讯美团滴滴offer
前言 一位小伙伴准备了许久的阿里Java面试,原以为能够顺利拿下offer,但在第三面还是被摁在地上反复摩擦,丧气一段时间后,小伙伴调整了心态重新尝试了一下,最终拿下了offer,今天小编把这位小伙伴遇到的面试…...
我的创作纪念日(2024.3.6)
机缘 从2020.10.11号进入博客,刚开始我只是把博客当作类似于微博的网站,用的比较少,后来到公司之后,开始使用博客进行做笔记,把工作上遇到的问题都记录下来,这样后面再遇到同样的问题就可以通过自己以前做…...
SpringBoot实战(1)
SpringBoot总结 一,Spring 设计思想 OOP: 面向对象编程-》封装、继承、多态 BOP: 面向Bean编程-》一切从Bean开始 AOP: 面向切面编程-》解藕、专 人做专事 IOC: 控制反转,将new 对象的操作交给Spring统一管理-》转交控制权 DI/DL: 依赖注入/依赖查找-》自动赋值 DI和AOP…...
Dgraph 入门教程二《 快速开始》
1、Clound 云 云地址:Dgraph Cloud 登录Clound 云后,可以用云上的东西操作,可以用谷歌账号或者github账号登录。 启动云 (1)在云控制台,点击 Launch new backend. (2)选择计划&…...
文件上传{session文件包含以及条件竞争、图片文件渲染绕过(gif、png、jpg)}
session文件包含以及条件竞争 条件: 知道session文件存储在哪里 一般的默认位置: /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID ####在没做过设置的情况下一般都是存储在/var…...
【论文精读】Mask R-CNN
摘要 基于Faster RCNN,做出如下改变: 添加了用于预测每个感兴趣区域(RoI)上的分割掩码分支,与用于分类和边界框回归的分支并行。mask分支是一个应用于每个RoI的FCN,以像素到像素的方式预测分割掩码,只增加了很小的计…...
vue + js 项目打包JS、CSS文件自动部署到oss
一、下载oss依赖 npm install webpack-aliyun-oss 或 yarn add webpack-aliyun-oss 二、在vue.config.js中配置文件 const WebpackAliyunOss require("webpack-aliyun-oss");let VUE_APP_BUCKET "xxx"; let VUE_APP_REGION "xx-xxx-xxx";m…...
微型LORA数传模块:科技赋能,传统楼宇智能蜕变
微型LoRa数传模块凭借小体积、低功耗、远距离、强穿透、易部署的核心优势,是智慧楼宇实现无线化、低成本、广覆盖物联网感知与控制的理想选择,尤其适合老旧楼宇改造与新建楼宇的轻量化智能化升级。一、核心优势(适配智慧楼宇场景)小体积易安装࿱…...
微服务架构的陷阱:我们是如何从拆分成“微”麻烦的
对于软件测试从业者而言,微服务架构的兴起既带来了前所未有的挑战,也揭示了隐藏在水面之下的诸多陷阱。从单体应用向微服务转型,初衷是为了提升系统的灵活性、可维护性和团队的交付效率。然而,在实践中,许多团队却发现…...
高效低成本馈电保护电路设计与应用
1. 为什么需要馈电保护电路? 有源天线在通信系统中扮演着重要角色,但实际使用中经常会遇到一些棘手的问题。比如在野外作业时,技术人员可能会频繁插拔天线;或者在长期运行过程中,天线内部电路可能出现故障。这些情况都…...
新能源车BMS低压管理避坑指南:如何解决上下电时序中的典型问题
新能源车BMS低压管理避坑指南:如何解决上下电时序中的典型问题 在新能源汽车的电池管理系统(BMS)开发中,低压上下电时序控制是确保系统稳定运行的关键环节。许多开发团队在实际项目中都会遇到信号冲突、时序错乱、异常处理机制不完…...
小红书自动评论的‘伪需求’与真风险:聊聊RPA工具养号背后的封号逻辑与合规玩法
小红书自动化评论的合规边界:效率与账号安全的博弈术 凌晨三点,某MCN机构运营负责人李然被连续不断的手机提示音惊醒——团队管理的12个小红书达人账号同时收到平台封禁通知,而这一切都源于他们三天前部署的那套"高效互动系统"。这…...
AI报告文档审核赋能数据不出域:IACheck重构机械制造行业本地化质量管控体系
在机械制造行业不断推进数字化与智能化转型的过程中,“数据不出域”逐渐从合规要求演变为一种核心能力,即在保障数据安全的前提下,实现数据的高效利用与价值转化,而在这一背景下,检测报告作为连接生产过程与质量评估的…...
Mermaid Live Editor终极指南:10个团队协作和项目管理的实用技巧
Mermaid Live Editor终极指南:10个团队协作和项目管理的实用技巧 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-l…...
LangChain框架使用说明
LangChain框架的安装与环境配置 LangChain的安装可通过Python包管理器快速完成。核心库包括langchain、langchain-community和langchain-core,建议使用以下命令进行完整安装: pip install langchain langchain-community langchain-core openai环境配…...
Llama-3.2V-11B-cot快速部署:Docker镜像开箱即用,5分钟启动视觉CoT服务
Llama-3.2V-11B-cot快速部署:Docker镜像开箱即用,5分钟启动视觉CoT服务 1. 项目概述 Llama-3.2V-11B-cot是一个支持系统性推理的视觉语言模型,基于LLaVA-CoT论文实现。这个模型能够理解图像内容并进行逐步推理,最终给出合理的结…...
别再只会让舵机转圈了!用Arduino和SG90实现精准角度控制的保姆级教程
从转圈到精准控制:Arduino与SG90舵机的高级应用指南 第一次接触舵机时,我们往往满足于让它简单地来回转动——这确实很有趣,就像给玩具注入了生命。但当你真正想用它构建一个机械臂、智能云台或是自动喂食器时,这种粗放的控制方式…...
