【征服redis7】谈谈Redis的RDB持久化方式

从现在开始,我们来探讨redis的一个非常重要的问题——集群,要讨论集群,我们需要先理解redis持久化数据的方法,因为集群本质上就是将一个集群的数据同步到其他机器上。

Redis 6的持久化机制主要有两种:RDB(Redis DataBase)和AOF(Append Only File)。前者效果好,但是代价高,使用频率低,后者则完全相反。本文将详细介绍这两种持久化方式的工作原理和配置要点。

目录

1. RDB持久化原理

1.1 基本原理

1.2 RDB的优点和缺点

2.持久化的5个步骤

3.RDB持久化实战


1. RDB持久化原理

1.1 基本原理

RDB持久化是将当前进程的数据生成快照保存到磁盘的过程。它可以通过手动触发或自动触发两种方式来执行。

手动触发RDB持久化可以使用save命令或bgsave命令。save命令会阻塞Redis服务器直到RDB过程完成,而bgsave命令则会创建一个子进程来执行持久化操作,主进程可以继续处理其他请求。

自动触发RDB持久化可以在配置文件中设置save指令,指定在一定时间间隔内有一定数量的修改操作时自动触发bgsave命令。
三种主要的触发机制:

1.Save命令:Save命令是手动触发RDB持久化的机制。当执行Save命令时,Redis会阻塞主线程,创建一个子进程,将数据快照保存到磁盘上的RDB文件中。在持久化完成之前,Redis的主线程将无法处理其他请求。

2.BGSAVE命令:BGSAVE命令是异步触发RDB持久化的机制。当执行BGSAVE命令时,Redis会创建一个子进程,在子进程中进行数据快照的生成和保存。与Save命令不同的是,BGSAVE命令不会完全阻塞主线程,可以继续处理其他请求。

3. 自动触发:Redis 6.0引入了自动触发RDB持久化的机制。可以通过配置文件中的save选项来设置自动触发的条件。例如,设置save 900 1表示在900秒(15分钟)内,如果至少有1个键发生变化,则自动触发RDB持久化操作。这样可以根据实际需求来灵活地控制RDB持久化的频率。

这些触发机制可以根据需求和场景选择合适的方式来进行RDB持久化,以保证数据的持久性和恢复能力。再次对之前的回答失误表示歉意,希望这次回答能够满足你的需求。如果还有其他问题,请随时提问。
RDB持久化的优点包括快速恢复数据、压缩存储和加载速度快。缺点是实时性较差,无法做到秒级持久化,并且执行bgsave命令会进行fork子进程,频繁执行开销较大。

RDB持久化的配置项包括:

  • dbfilename:RDB文件在磁盘上的名称。
  • dir:RDB文件的存储路径。
  • stop-writes-on-bgsave-error:如果持久化过程出错,主进程是否停止写入操作。
  • rdbcompression:是否对RDB文件进行压缩。
  • rdbchecksum:在RDB文件末尾添加冗余校验编码。

1.2 RDB的优点和缺点

RDB 它会周期性地将 Redis 内存中的数据快照写入到硬盘中,并生成对应的 RDB 文件。

优点是:

  1. 数据恢复速度快:由于 RDB 文件采用二进制格式存储,文件体积较小,恢复速度非常快。
  2. 对性能影响小:与 AOF 持久化方式相比,RDB 持久化方式对 Redis 的性能影响要小很多,因为 RDB 仅在指定的时间间隔内执行一次快照存储操作。
  3. 文件体积小:由于 RDB 文件采用二进制格式存储,文件体积较小,可节省存储空间。
  4. 可以单独备份:RDB 文件可以单独备份,方便进行数据迁移和备份。

缺点是:

  1. 可能会丢失一定量的数据:由于 RDB 持久化方式是周期性地生成快照文件,如果在两次快照文件之间 Redis 发生宕机,就会丢失这段时间内的数据。
  2. 数据一致性较低:由于 RDB 持久化方式并不是实时同步,而是周期性快照存储,因此在宕机时可能会丢失一部分数据,数据一致性较 AOF 持久化方式要低。
  3. 不支持实时备份:由于 RDB 持久化方式是周期性快照存储,因此不支持实时备份。

整体而言RDB 持久化方式可以提供快速的数据恢复能力,对 Redis 的性能影响比较小,同时也可以节省存储空间。但是,它也存在丢失一定量数据和数据一致性较低的问题,需要根据实际情况进行权衡和选择。后面我们讲解另一种持久化方式AOF。我们可以对照着学习一下。
 

2.持久化的5个步骤

RDB持久化方式一共可以分为5步,第五步其实就是持久化恢复,也可以不算。

具体来说:

1. 触发条件: 可以通过配置文件中的save参数来设置RDB持久化的触发条件。当满足设定的触发条件时,Redis会执行RDB持久化操作。

2. 快照生成:当触发条件满足时,Redis会调用fork函数创建一个子进程。父进程继续处理客户端的请求,而子进程负责将数据写入RDB文件。

3. 写入过程:子进程会遍历Redis服务器中的所有数据库,将每个数据库的键值对写入到RDB文件中。写入过程中,子进程会将数据转换为二进制格式,并按照一定的规则进行压缩。

4. 写入完成:当子进程完成RDB文件的写入后,它会用新生成的RDB文件覆盖原来的RDB文件。这个过程是原子的,可以保证RDB文件的完整性。

5. 恢复:当Redis服务器重新启动时,它会检查是否存在RDB文件。如果存在,Redis会加载RDB文件,并将其中的数据恢复到内存中,从而完成数据的持久化恢复。

比较坑的是 RDB持久化是一个阻塞操作,即在进行RDB持久化期间,Redis服务器将暂停响应客户端的请求。这是因为RDB持久化是通过fork子进程来完成的,而fork操作会复制整个父进程的内存空间,可能会耗费大量的CPU和内存资源。

此外,RDB持久化还有一些配置选项可以进行调整,例如可以设置RDB文件的路径和名称、是否压缩RDB文件、触发条件的设置等。这些选项可以通过Redis的配置文件redis.conf来进行配置。
 

3.RDB持久化实战

这里想研究一下如何在本地模拟观察一下rdb初始化,如果想启动两个以上的redis用docker方式好一些,后面研究一下怎么更方便的进行。

文章参考:rdb持久化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CUDA】GPU 算力与 CUDA 版本对应关系

1. 查询 GPU 算力(Compute Capability) 官方算力表:https://developer.nvidia.com/cuda-gpus#compute 2. GPU 算力与 CUDA 版本对应关系 2.1. 信息来源 1 https://docs.nvidia.com/datacenter/tesla/drivers/index.html#cuda-arch-matri…

Kafka-消费者-KafkaConsumer分析-SubscriptionState

KafkaConsumer从Kafka拉取消息时发送的请求是FetchRequest(具体格式后面介绍),在其中需要指定消费者希望拉取的起始消息的offset。 为了消费者快速获取这个值,KafkaConsumer使用SubscriptionState来追踪TopicPartition与offset对应关系。 图展示了SubscriptionSta…

el-dialog嵌套使用,只显示遮罩层的问题

直接上解决方法 <!-- 错误写法 --><el-dialog><el-dialog></el-dialog></el-dialog><!-- 正确写法 --><el-dialog></el-dialog><el-dialog></el-dialog>我是不建议嵌套使用的&#xff0c;平级也能调用&#xff0c…

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型&#xff08;如 Chinese-LLaMA、ChatGLM等&#xff09;的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…

Qt 状态机框架:The State Machine Framework (二)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 1、利用并行态避免态的组合爆炸 假设您想在单个状态机中对汽车的一组互斥属性进行建模。假设我们感兴趣的属性是干净与肮脏&#xff0c;以及移动与不移动。需要四个…

【教3妹学编程-算法题】检查按位或是否存在尾随零

3妹&#xff1a;呜呜&#xff0c;烦死了&#xff0c; 脸上长了一个痘 2哥 : 不要在意这些细节嘛&#xff0c;不用管它&#xff0c;过两天自然不就好了。 3妹&#xff1a;切&#xff0c;你不懂&#xff0c;影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊&#xff0c; 工作…

Golang通过Gorm操作Mysql时遇到的datetime时区问题

情景描述 golang使用Gorm操作MySQL&#xff0c;MySQL中数据类型是datetime&#xff0c;Golang中用的是time.now。 但是会导致存储的时间与北京时间有8h误差&#xff0c; 显然是没有初始化时区导致。 问题修复 初始化设置时区 参考我自己之前写过的一篇总结——Mysql中多种日…

QT上位机开发(不同场景下界面的设计模板)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 qt由于其优秀的跨平台属性&#xff0c;几乎成了嵌入式开发界面开发的标配。同时呢&#xff0c;由于它在windows平台开发出来的效果也是非常的好&am…

Python开发环境安装:梦的起点

Python解释器安装 前言 解释器&#xff08;Interpreter&#xff09;&#xff0c;又译为直译器&#xff0c;是一种电脑程序能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来&#xff0c;只像一位“中间人”&#xff0c;每次运行程序时都要先转成另一…

dubbo入门案例!!!

入门案例之前我们先介绍一下&#xff1a;zookeeper。 Zookeeper是Apacahe Hadoop的子项目&#xff0c;可以为分布式应用程序协调服务&#xff0c;适合作为Dubbo服务的注册中心&#xff0c;负责服务地址的注册与查找&#xff0c;相当于目录服务&#xff0c;服务提供者和消费者只…

rust跟我学七:获取外网IP地址

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎么获取到本机的外网IP地址。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:[…

测试驱动开发:基于Jenkins+GoTest+HTML的持续化集成

目录 前言 一、项目框架 1.项目迭代 2.项目时序图 3.项目测试执行 二、项目具体实现 1.创建流水线 2.拉取代码 3.执行测试代码 4.生成测试报告 5.报告内容解读 6.数据统计 7.邮件通知 8.企业微信通知 三、项目遇到的问题 1.go test -args 2.go test生…

MyBatisPlus学习笔记四-扩展功能

1、代码生成器 1.1、官方的1 1.3、官方的2-idea插件 1.3、非官方的-idea插件 2、静态工具 先查询&#xff0c;再分组 3、逻辑删除 4、枚举处理器 5、JSON处理器

二、ArcGIS Pro SDK 开发环境配置踩坑

上篇写了如何配置开发环境&#xff0c;也确实是配置好了&#xff0c;激动的就睡觉去了&#xff0c;万万没想到&#xff0c;今天当要创建工程的时候&#xff0c;结果发现创建不了&#xff0c;弹出了如下错误&#xff1a; 很郁闷&#xff0c;于是有查找了资料发现&#xff1a; 是…

2024年华数杯国际赛B题超详细解题思路

ICM B题&#xff1a;光伏发电 该题目出题的难度与方向都与美赛ICM的题型高度相似&#xff0c;将本次竞赛当做美赛的练手赛&#xff0c;个人认为是非常合适的一种选择。同时28号就可以出成绩&#xff0c;也可以在美赛前实现查漏补缺&#xff0c;提前预祝大家比赛顺利&#xff0…

如何用WhatsApp做外贸?

WhatsApp 可帮助企业和客户快速建立个性化的联系&#xff0c;进行产品和服务类营销推广&#xff0c;并在购物过程中及时回应和解决客户的问题。 WhatsApp Business还可以帮助大中型企业提供客户服务支持&#xff0c;并向客户发出消息通知。 如果是中小企业&#xff0c;可以使用…

Centos 8 安装 Elasticsearch

简介&#xff1a;CentOS 8是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统。它是一款稳定、可靠、安全的服务器操作系统&#xff0c;适合用于企业级应用和服务的部署。CentOS 8采用了最新的Linux内核和软件包管理系统&#xff0c;提供…

SAP 销售订单审批状态(查询/修改)

销售订单审批状态启用后&#xff0c;前端显示界面如下图 销售订单审批状态读取&#xff1a;STATUS_READ 销售订单审批状态修改&#xff1a;I_CHANGE_STATUS 销售订单审批状态读取 代码样例如下&#xff1a; DATA: lv_objnr TYPE vbak-objnr,lv_objnr_t TYPE jsto-objnr,l…

深度学习记录--正则化(regularization)

什么是正则化&#xff1f; 正则化(regularization)是一种实用的减少方差(variance)的方法&#xff0c;也即避免过度拟合 几种正则化的方法 L2正则化 又被称为权重衰减(weight dacay) 在成本函数中加上正则项&#xff1a; 其中 由于在w的更新过程中会递减&#xff0c;即权…

【备战蓝桥杯】吃奶酪问题 / 超硬核,文附template拓展知识!

蓝桥杯备赛 | 洛谷做题打卡day9 文章目录 蓝桥杯备赛 | 洛谷做题打卡day9再来了解一下状压dp**简介(Introduction)****描述(Description)** - 吃奶酪题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模与约定提示 * template拓展知识我的一些话 【引入】今天…