【征服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持久化

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

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

相关文章

springboot开启HTTPS

目录 一、前言 HTTP和HTTPS的含义以及区别 二、域名映射 三、添加SSL证书 四、Http转Https 五、内网穿透 一、前言 我们平常写完一个接口,其访问一般都是使用http协议 我们最终想要的结果是使用安全的HTTPS来访问 在我们开始实现之前,我们要先搞明…

烟火识别视频分析系统的应用-河北消防机器人项目

在当前的智能化、信息化时代背景下,河北省消防部门采纳了一项革命性的技术方案 —— 烟火识别视频分析系统,结合消防机器人的使用,大幅提升了火灾预防与应急处理能力。该项目的核心在于通过高精度的视频监控,实时分析识别潜在的火…

【笔记】Helm-3 主题-6 Chart仓库指南

Chart仓库指南 本节介绍如何创建和使用chart仓库。在高层级中,chart仓库是打包的chart存储和分享的位置。 社区的Helm chart仓位于 Artifact Hub ,欢迎加入。不过Helm也可以创建并运行您自己的chart仓库。该指南将介绍如何操作。 Artifact Hub 先决条…

Microsoft Word 设置底纹

Microsoft Word 设置底纹 References 打开文档页面,选中特定段落或全部文档 在“段落”中单击“边框”下三角按钮 在列表中选择“边框和底纹”选项 在“边框和底纹”对话框中单击“底纹”选项卡 在图案样式和图案颜色列表中设置合适颜色的底纹,单击“确…

S32K3系列 --- 硬件I2C Mcal配置

前言 网上看到很多I2C的教程,基本都是模拟I2C,现在S32K3的芯片支持硬件I2C,我想着就配一个硬件的出来吧,这边记录一下,供大家学习。 一、I2C原理 这里主要教大家如何去配置,去使用。 原理的话可以参考这篇文章: 一文搞懂I2C通信总线_i2c通信的详细讲解-CSDN博客 I2…

Spring5深入浅出篇:Spring工厂设计模式拓展应用

Spring5深入浅出篇:Spring工厂设计模式拓展应用 简单工厂实现 这里直接上代码举例子 UserService.java public interface UserService {public void register(User user);public void login(String name, String password); }UserServiceImpl.java public class UserService…

Three.JS教程1环境搭建、场景与相机

Three.JS教程1环境搭建、场景与相机 一、Three.JS简介二、环境搭建1. 开发准备2. 安装 three.js3. 新建文件index.htmlmain.js 4. 关于附加组件5. 启动 三、创建场景1. 场景的概念2. 相机的概念3. 相机的几个相关概念(1)视点(Position&#x…

Ability to Use Oracle Data Pump to Export and Import the Unified Audit Trail

Ability to Use Oracle Data Pump to Export and Import the Unified Audit Trail 从18c版本开始才能使用数据泵工具导出统一审计的记录

DAY03_Spring—自动装配注解模式优化XML文件

目录 1 Spring注解模式1.1 自动装配1.1.1 说明1.1.2 配置规则 1.2 注解模式1.2.1 关于注解的说明1.2.2 注解使用原理1.2.3 编辑配置文件1.2.4 属性注解 1.3 实现MVC结构的纯注解开发1.3.1 编写java代码1.3.2 编辑xml配置文件1.3.3 编写测试类1.3.4 关于注解说明1.3.5 关于Sprin…

Ubuntu20.4 Mono C# gtk 编程习练笔记(二)

界面设计习练后,下面写一些程序设计心得。 程序结构 先看一下程序总体结构,先在program.cs中找到main入口,在命名空间下是MainClass类,Main函数进入后首先建立应用程序环境 Application.Init,然后对MainWindow进行实…

【嘉立创EDA-PCB设计指南】3.网络表概念解读+板框绘制

前言:本文对网络表概念解读板框绘制(确定PCB板子轮廓) 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2,将设计的原理图转为了PCB,在PCB界面下出现了所有的封装,以及所有的飞线属性&…

【开源】基于JAVA语言的智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

【Docker】安装 Nginx 容器并部署前后端分离项目

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 &…

GRU门控循环单元神经网络的MATLAB实现(含源代码)

在深度学习领域,循环神经网络(RNN)因其在处理序列数据方面的卓越能力而受到广泛关注。GRU(门控循环单元)作为RNN的一种变体,以其在捕捉时间序列长距离依赖关系方面的高效性而备受推崇。在本文中&#xff0c…

SpringBoot 中使用 Quartz 创建定时任务

文章目录 一、使用示例二、运行原理 一、使用示例 自定义 job: Slf4j public class MyJob extends QuartzJobBean {Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {log.info("MyJob start...");l…

JavaWeb后端——Maven

maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理 maven项目对象模型简称POM, maven解决问题: 1. 添加第三方jar包,maven将 jar 包放在本地仓库中统一管理,使用时用坐标的方式引用即可 2. 解决 jar 包之间的依…

Facebook与环境保护:社交媒体的可持续发展

在当今社会,科技发展日新月异,而社交媒体作为数字时代的代表之一,正面临着巨大的责任与机遇。随着全球环境问题的凸显,社交媒体平台如Facebook也逐渐认识到自身在环保可持续发展中的角色。本文将深入探讨Facebook在环境保护方面的…

统计学-R语言-5.3

文章目录 前言分位数统计量的标准误总结 前言 本篇文章即为概率与分布的最后一篇文章。 分位数 分位数函数是累积分布函数的反函数。 p-分位数是具有这样性质的一个值:小于或等于它的概率为p。 根据定义,中位数即50%分位数。 分位数通常用于置信区间的…

vite 打包优化

✨专栏介绍 在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具…

【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课

问题定义与理解: 明确机器学习任务的目标,是分类、回归、聚类、强化学习还是其他类型的问题。 确定业务背景和需求,了解所处理数据的现实意义。 数据收集: 根据任务目标从各种来源获取原始数据,可以是数据库、文件、…