[Redis][持久化][上][RDB]详细讲解

目录

  • 0.前言
  • 1.RDB
    • 0.是什么?
    • 1.触发机制
    • 2.流程说明
    • 3.RDB文件的处理
    • 4.RDB的优缺点


0.前言

  • Redis ⽀持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利⽤之前持久化的⽂件即可实现数据恢复
    • RDB -> 定期备份
    • AOF -> 实时备份
  • Redis如何做到持久化?
    • 当要插入一个新的数据的时候,就需要把这个数据,同时写入到内存和硬盘上
      • 硬盘的数据只是在Redis重启的时候,用来恢复内存中的数据的
    • 当查询某个数据的时候,直接从内存读取

1.RDB

0.是什么?

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

1.触发机制

  • 手动触发分别对应savebgsave命令:
    • save阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例造成长时间阻塞,基本不采用
    • bgsave:Redis进程执行fock操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束,阻塞只发生在fock阶段,一般时间很短
      • fork写时拷贝,开销较小
  • Redis内部的所有涉及RDB的操作都采用类似bgsave的方式
  • Redis运行自动触发RDB持久化机制,该触发机制才是在实战中有价值的
    • 使用save配置,如save m n表示m秒内数据集发生了n次修改,自动RDB持久化
    • 从节点进⾏全量复制操作时,主节点⾃动进⾏RDB持久化,随后将RDB⽂件内容发送给从结点
    • 执行shutdown命令关闭Redis时,执行RDB持久化

2.流程说明

  • bgsave是主流的RDB持久化方式,主要流程如下:
    • 执⾏bgsave命令,Redis⽗进程判断当前进程是否存在其他正在执⾏的⼦进程
      • 例如:RDB/AOF⼦进程,如果存在bgsave命令直接返回
    • ⽗进程执⾏fork创建⼦进程,fork过程中⽗进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近⼀次fork操作的耗时,单位为微秒
    • ⽗进程fork完成后,bgsave命令返回"Background saving started"信息并不再阻塞⽗进程,可以继续响应其他命令
    • ⼦进程创建RDB⽂件,根据⽗进程内存⽣成临时快照⽂件,完成后对原有⽂件进⾏原⼦替换。执⾏lastsave命令可以获取最后⼀次⽣成RDB的时间,对应info统计的rdb_last_save_time选项
    • 进程发送信号给父进程表示完成,父进程更新统计信息
      请添加图片描述

3.RDB文件的处理

  • 保存
    • RDB⽂件保存在dir配置指定的⽬录(默认/var/lib/redis/)下,⽂件名通过 dbfilename配置(默认dump.rdb)指定
    • 可以通过执⾏config set dir {newDir}config set dbfilename {newFilename}运⾏期间动态执⾏,当下次运⾏时RDB⽂件会保存到新⽬录
  • 压缩:Redis默认采⽤LZF算法对⽣成的RDB⽂件做压缩处理,压缩后的⽂件远远⼩于内存⼤⼩,默认开启,可以通过参数config set rdbcompression {yes|no}动态修改
    • 注意:虽然压缩 RDB会消耗CPU,但可以⼤幅降低⽂件的体积,⽅便保存到硬盘或通过⽹络发送到从节点,因此建议开启
  • 校验:如果Redis启动时加载到损坏的RDB⽂件会拒绝启动,此时可以使⽤Redis提供的redis check-dump⼯具检测RDB⽂件并获取对应的错误报告
    • 可以通过redis-check-rdb手动校验

4.RDB的优缺点

  • 优点
    • RDB是⼀个紧凑压缩的⼆进制⽂件,代表Redis在某个时间点上的数据快照,⾮常适⽤于备份,全量复制等场景
      • 例如:每6⼩时执⾏bgsave备份,并把RDB ⽂件复制到远程机器或者⽂件系统(如 hdfs)⽤于灾备
    • Redis加载RDB恢复数据远远快于AOF的方式
      • RDB以二进制的方式来组织数据,直接把数据读取到内存中,按照字节的格式取出来,放到结构体/对象中即可
      • AOF使用文本的方式来组织数据,需要进行一系列的字符串切分操作
  • 缺点
    • RDB⽅式数据没办法做到实时持久化 / 秒级持久化,因为bgsave每次运⾏都要执⾏fork创建⼦进程,属于重量级操作,频繁执⾏成本过⾼
    • RDB ⽂件使⽤特定⼆进制格式保存,Redis 版本演进过程中有多个 RDB 版本,兼容性可能有⻛险

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

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

相关文章

Qt/C++ 了解NTFS文件系统,解析MFT主文件表中的常驻属性与非常驻属性

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统,了解MFT(Master File Table)主文件表(一) 介绍NTFS文件系统,对比通过MFT(Master File Tab…

16、斑马设备的ppocer-4进行文字识别,和opencv-mobile中文显示

基本思想:手上有个斑马设备,是客户的,简单记录一下开发过程和工程项目,同时记录跟着android小哥学习了很多anroid的知识,转ppocr-4参考之前的ppocr-3转换即可,整个框架仍然使用c++ ncnn jni框架推理和现实,图像库使用opencv-mobile 一、首先转paddle-cor-4 到ncnn的框架…

Pointnet++改进59:全网首发MogaBlock(2024最新模块)|用于在纯基于卷积神经网络的模型中进行判别视觉表示学习,具有良好的复杂性和性能权衡

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入MogaBlock,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.…

pdf怎么删除空白页?分享5个删除pdf页面的方法(批量删除法)

pdf文件因其跨平台、格式稳定的特性,已成为我们工作、学习中不可或缺的一部分。那么在编辑pdf格式文档中,总会遇到一些难题,比如说pdf怎么删除空白页 pdf与word一样,具备了多种编辑功能,只不过是word倾向于编辑&#x…

gitlab集成CI/CD,shell方式部署

目录 1.首先安装好gitlab和gitlab-runner,这两个,看我以往的教程 2.注册新的 Runner 3. 步骤 3.1 Enter the GitLab instance URL (for example, https://gitlab.com/): 3.2 Enter the registration token: 3.3 Enter a description for the runner: 3…

Python模块和包:自定义模块和包③

文章目录 一、模块1.1 什么是模块1.2 创建模块1.3 导入模块1.4 模块的命名空间 二、包2.1 什么是包2.2 创建包2.3 导入包2.4 包的命名空间 三、综合详细例子3.1 项目结构3.2 模块代码student.pycourse.pymanager.py 3.3 主程序代码main.py 3.4 运行结果 四、总结 Python模块和包…

Java 中的运算符重载

在这篇文章中,我们将深入探讨 Java 中 Operator 重载的迷人世界。尽管 Java 本身不支持运算符重载,但我们将发现 Manifold 如何使用该功能扩展 Java。我们将探讨它的好处、局限性和用例,尤其是在科学和数学代码方面。 我们还将探索 Manifold …

高清8k电脑壁纸分享

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:高清壁纸分享 文件太大上传不上去😅😅😅😅😅,需要的朋友自取&…

国货美妆品牌整合营销多少钱?

合作咨询联系竑图 hongtu201988 化妆品品牌线上推广费用到底高不高,需要多少钱,是每个经营者最为关注的问题。结合中小美妆品牌在网络上的费用投入,有一个大致的范围:几千元到几十万不等/年!品牌越大,投入越…

什么鬼?主备同步正常,备库查询表空间使用结果却是空的?

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享…

Centos Stream 9根目录扩容

要将 sda 的剩余空间扩展给 cs-root,可以按照以下步骤进行操作。假设你已经有剩余的未分配空间在 sda 上。 步骤 1:查看当前磁盘分区情况 首先,确保你有未分配的空间在 sda 上。 lsblk步骤 2:创建新的分区 使用 fdisk 或 par…

C++vector类的模拟实现

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟实现vector类 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前置说明 1. vecto…

数据结构2——单链表

目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 ​编辑2.无头单链表的实现 1. 节点 2.遍历链表 3.动态增加新节点 4.查找(修改) 5.插入 5.1 尾插 5.2 头插 5.3 在pos之前插入x 5.4 在pos之后插入x 6.删除 6.1 尾删 6.2 头删 6.3 删除…

YOLOv10改进,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点

改进前训练结果: 改进后的结果: 摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针…

狂神说多线程01

线程实现(重点) 多线程三个方法 继承Thread类 ⭐️实现Runnable 实现callable(了解) 线程状态 出生-? 线程同步(重点) (多个线程操作同一个对象,那个对象出现了不安…

RP2040 CXX SDK PIO应用例程

RP2040 CXX SDK PIO应用例程 📍DS18B20 PIO参考项目例程:https://github.com/jondurrant/RP2040PIO-DS18B20📍DHT11 PIO 参考项目例程:https://github.com/vmilea/pico_dht 在官方的SDK pico-examples中有关PIO的例程有20个&#…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台 Halo博客平台是一款基于Java的开源博客系统,以其简单易用、功能强大、美观大方等特点而受到广泛欢迎,采用了多种先进的技术框架,包括Freemarker模板引擎、Vue.j…

【STM32】【rt-thread】startup_stm32f405xx.S文件解读

startup_stm32f405xx.S文件解读 一、代码全文 /********************************************************************************* file startup_stm32f405xx.s* author MCD Application Team* brief STM32F405xx Devices vector table for GCC based toolcha…

每日OJ题_牛客_ 游游的you(贪心+模拟)

目录 牛客_ 游游的you(贪心模拟) 解析代码 牛客_ 游游的you(贪心模拟) 游游现在有a个y,b个o,c个u,他想用这些字母拼成一个字符串。 三个相邻的字母是"you"可以获得2分&#xff0c…

室内院内常见的不知名蚊虫(昆虫)图鉴和防治方法

文章目录 蟑螂形态特征出现源头危害性防治方法 跳蚤形态特征出现源头危害性防治方法 臭虫,又名木蚤、床虱、壁虱形态特征出现源头危害性防治方法 尘螨形态特征出现源头危害性防治方法 蛾蚋(ru),又名蛾蠓(měng&#xf…