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

news2024/11/16 1:40:20

目录

  • 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.coloradmin.cn/o/2160189.html

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

相关文章

展锐平台的手机camera 系统isptool 架构

展锐平台的isptool 主要用于支持展锐各代芯片isp的各效果模块快速tuning和参数生成打包。 具体需要: 一、工具段能在线实时预览到调试sensor经过isp 处理后的图像,也就是各模块的参数在当下实时生效,通过工具能在PC 上在线观看到修改的效果。…

[笔记]2024大厂变频器,电机参数一览

注意中心高,在用铁心规格,功率换算表 温升曲线在预防性维护过程能用到 注意各类电流参数,上面双极对,下面3极对。 另一种极对数 4极对的电机参数可参考,不常用。 emc滤波, Sto,通讯接口 颜色区分的接口设计 一组新强…

基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】

1、什么是MaxScale MaxScale是MariaDB数据库的一个中间件,为MariaDB提供代理服务,主要可以实现读写分离和一定的负载均衡功能,其中读写分离可将读操作和写操作分离到不同的数据库服务器上,以提高系统的整体性能和扩展性&#xff…

Pandas的入门操作-DataFrame对象

目录 类型 通过 pd.read_csv(xxx)返回df 将Series对象通过to_frame()转成df 使用列表 加元组返回df 使用字典返回df DataFrame对象的常用属性和方法 常用属性 常用方法 实例 DataFrame对象的运算 加载数据 字符串的运算 字符串和数字(会报错) 根据下表获取数据 类…

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/:中文官网里面【教程】和【API】是比较重要的。用到api就去查询,实践当中记忆更牢靠。 风格指南:官方推荐写的一个代码风格cookbook:编写v…

浙江省计算机三级网络及安全技术资料(最后有我考完后的想法)

还有一周就要考试了,网上几乎找不到浙江省的计算机三级网络及安全技术的复习资料,大部分都是全国计算机三级的复习资料,气得我直接对着大纲一部分一部分找过去。以后的友友们需要的自取,为了能够顺利通过浙江省计算机三级考试&…

『功能项目』按钮的打开关闭功能【73】

本章项目成果展示 我们打开上一篇72QFrameWork制作背包界面UGUI的项目, 本章要做的事情是制作打开背包与修改器的打开关闭按钮 首先打开UGUICanvas复制button按钮 重命名为ReviseBtn 修改脚本:UIManager.cs 将修改器UI在UGUICanvas预制体中设置为隐藏 运…

FP7208:升压汽车车灯方案 高效稳定的电力支持

前言 近年来随着汽车的不断普及,车灯方面也在不断发展,车灯对于汽车不仅是外观件更是汽车主动安全的重要组成部分。灯光在保证照亮前部道路的同时,还要确保不对对面车辆产生眩目影响。同时需要针对不同路况和不同载荷引起的灯光偏离进行调整&…

Linux:文件描述符详解

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程,都拥有自己的文件描述符(File Descriptor, FD),它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

胤娲科技:DeepMind的FermiNet——带你穿越“薛定谔的早餐桌”

当AI遇上量子迷雾,FermiNet成了你的“量子导航仪” 想象一下,你早晨醒来,发现家里的厨房变成了薛定谔的实验室,你的咖啡杯和吐司同时处于“存在与不存在”的叠加态。 你伸手去拿,却不确定会不会摸到冰冷的空气或是热腾…

文献笔记 - Reinforcement Learning for UAV Attitude Control

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者,文献的引用格式如下,原文更有价值 Koch W, Mancuso R, West R, et al. Reinforcement learning for UA…

前端——表单和输入

今天我们来学习web前端中的表单和输入 表单 HTML 表单用于收集用户的输入信息,用表单标签来完成服务器的一次交互。 HTML 表单表示文档中的一个区域,此区域包含交互控件,将用户收集到的信息发送到 Web 服务器。 HTML 表单通常包含各种输入…

【android10】【binder】【3.向servicemanager注册服务】

系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 …

为什么AI不会夺去软件工程师的工作?

▼ 自从AI大模型爆火以来,我每天的工作中,已经有大量的真实代码是通过AI完成的。人工智能辅助下的编程,确实大幅减轻了我的工作负担,大大提高了生产力。 大语言模型是如此成功,以至于无可避免地在开发者社区中引起了…

TortoiseSVN提交时忽略某些文件夹,不让它在提交列表中出现

1.首先右键,点击属性 2.新建一个忽略规则,点击确定即可

【React】原理

笔记来源:小满zs 虚拟 DOM // react.js // jsx > babel | swc > React.createElement const React {createElement(type, props, ...children) {return {type,props: {...props,children: children.map(child > typeof child object ? child : React.cr…

算法揭秘:时间复杂度与空间复杂度的实用指南

在我们编程的过程中,算法是解决问题的核心。而在评估算法的优劣时,时间复杂度和空间复杂度是两个不可或缺的概念。无论你是刚入门的编程小白,还是希望深入了解的学习者,理解这两个概念都能帮助你写出更高效的代码。今天&#xff0…

一步到位的智慧:BI可视化大屏在复杂环境中如何精准拾取目标

在可视化设计器中实现良好的组件拾取功能,是提升用户体验和设计效率的关键。它们不仅能够提升用户体验和操作效率,还能够增强设计的灵活性和精度,促进设计创新,并最终提升设计的质量和价值。因此,在可视化设计过程中&a…

【leetcode】环形链表、最长公共前缀

题目:环形链表 解法一:哈希表 创建一个哈希表,遍历链表先判断哈希表中是否含有要放入哈希表中的节点,如果该节点已在哈希表中出现那么说明该链表是环形的;如果链表节点出现nullptr那么就退出循环,该链表是…

AI美女横扫小红书:虚拟魅力如何颠覆网红时代?真真假假难辨,但是一样美!

最近, 关于AI美女在小红书上“屠版”的消息引发了广泛讨论。根据一位网友的群聊记录,他声称利用文生图模型生成AI美女图片,并通过账号矩阵管理软件操控了1327个小红书账号,成功将平台“屠版”。 更令人惊讶的是,小红…