17.Redis系列之快照RDB方式持久化

news2025/7/29 22:01:23

本文学习redis两大持久化技术之一:RDB(redis database)快照方式持久化备份与还原,以及RDB方式的优缺点

1. RDB相关配置

首先我们先简单了解下Redis7中RDB相关配置

// save <seconds> <changes> [<seconds> <changes> ...]
// 默认配置1小时至少1个key、15分钟60个key、1分钟1W个key变动会进行RDB快照操作
save 3600 1 300 100 60 10000
// 当快照保存失败时禁止redis写入key,一般都是磁盘空间满,与ES类似
stop-writes-on-bgsave-error yes
// 采用LZF算法【对重复值压缩,通过hash表判重】压缩.rdb快照文件
rdbcompression yes
// 采用CRC64算法检查.rdb文件完整性
rdbchecksum yes
// RDB快照文件名称
dbfilename dump.rdb
// RDB快照文件存储目录
dir ./

2. RDB快照还原实践

redis启动后,未进行任何操作截图

1

通过代码我们写入10100条数据

@SpringBootTest
public class RedisTest {

    @Autowired
    private RedissonClient redissonClient;

    @Test
    public void testRdb() throws InterruptedException {
        RMap<String, String> rMap = redissonClient.getMap("rdb");
        for (int i = 0; i < 10020; i++) {
            rMap.put(i + "", i + "");
        }
        Thread.sleep(60000);
        for (int i = 0; i < 80; i++) {
            rMap.put(i + "ok", i + "ok");
        }
    }
}

2

由图可以看到,RDB快照已生成,hkeys rdb可以看到有10100个key

我们将生成dump.rdb文件重命名为dump.rdb.bak作为模拟备份文件
执行以下命令后,可以看到系统又重新生成了dump.rdb文件

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> shutdown

现在我们删除dump.rdb文件,并将dump.rdb.bak改为dump.rdb模拟快照还原后启动redis,执行hkeys rdb可以看到只有10020个key在快照中保存了下来

3

由此我们验证了:1分钟1W个key变动会进行RDB快照,因为1-10020个key是在一分钟内的操作,所以RDB快照保存了下来,而对于10021-10100的key操作是在下一个分钟内的操作,未满足变动条件不进行RDB快照,所以宕机后还原RDB快照后我们发现它们丢失了

对于未满足变动条件的我们可以手工执行来备份

# 异步非阻塞方式备份
127.0.0.1:6379> bgsave
Background saving started
# 同步阻塞方式备份【慎用】
127.0.0.1:6379> save
OK

3. RDB快照流程

4

在bgsave的时候,采用fork+copyonwrite[写时拷贝技术]技术。fork()是linux的api,用于创建一个子进程。fork()出来的进程共享其父类的内存数据,仅仅是共享fork()出子进程的那一刻的内存数据,后期主进程修改数据对子进程不可见。
主进程fork()子进程之后,内核把主进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向主进程。这也就是共享了主进程的内存,当主进程写内存时(肯定是主进程写,因为子进程只负责rdb文件持久化工作,不参与客户端的请求),CPU硬件检测到内存页是read-only的,于是触发页异常中断(page-fault),陷入内核的一个中断例程。中断例程中,内核就会把触发的异常的页复制一份(这里仅仅复制异常页,也就是所修改的那个数据页,而不是内存中的全部数据),于是主子进程各自持有独立的一份
copyonwrite总结: fork()出来的子进程共享主进程的物理空间,当主进程有内存写入操作时,read-only内存页发生中断,将触发异常的内存页复制一份(其余的页还是共享主进程的)从而主进程可写,而子进程继续进行老数据的RDB快照

4. RDB快照优缺点

优点:

  • fork+copyonwrite技术,rdb快照不影响redis主进程
  • 适合大规模数据恢复,恢复速度快
  • 适合对数据完整性与一致性要求不高场景
  • 节省磁盘空间

缺点:

  • fork后,对于写时拷贝技术,海量数据修改比较消耗性能
  • redis宕机后,在最后一次快照后的所有修改会丢失

欢迎关注公众号 算法小生 与我沟通交流

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

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

相关文章

Python理论之一 —— 数据读写

文章目录1. Excel1.1 openpyxl 模块1.1.1 打开表格、读取/获取信息1.1.1.1 打开表格、获取表格内sheet名&#xff1a;1.1.1.2 根据sheet名获取工作表1.1.1.3 获取表格的尺寸大小&#xff1a;尺寸大小指excel表格中的数据有几行几列1.1.1.4 获取表格内某个格子的数据&#xff1a…

电影《扫黑行动》观后感

上周看了电影《扫黑行动》&#xff0c;讲述三年扫黑除恶专项行动中的一个具体事件。 记得前几年&#xff0c;估计你也听过类似新闻&#xff0c;就是大学贷&#xff0c;学生贷等等系列&#xff0c;面向学生的贷款&#xff0c;借钱的人明知道&#xff0c;学生一般是没有偿还能力的…

在家每次开门都安心,在外也能芝麻开门——云米AI智能门锁Super 2体验

很多人都遇到过出门忘带钥匙的尴尬&#xff0c;好在如今有了智能门锁这种看家好工具&#xff0c;既可以通过密码、指纹等多种方式轻松开锁&#xff0c;又可以随时通过手机APP来查看异常情况&#xff0c;确实是现在居家必备的好东西。这个月我也把家里大门上不太好用的老锁&…

IPWorks WebSockets Delphi版

IPWorks WebSockets Delphi版 IPWorks WebSocket包括一组功能强大的组件&#xff0c;用于将WebSocket通信功能集成到Web、桌面和移动应用程序中。这些组件非常适合构建需要实时数据的Web连接应用程序&#xff0c;包括聊天、多人游戏、实时金融应用程序等。 IPWorks WebSockets功…

Linux18 ---进程和线程、线程实现方法、线程的使用接口、多线程代码实现、线程并发运行

一、进程和线程&#xff1a; 1、进程和线程的相关概念&#xff1a; 进程&#xff1a;是一个正在运行的程序&#xff0c;是个动态的概念。一个进程可以实现多个线程。 线程&#xff1a;是进程内部的一条执行路径或称为执行序列&#xff0c;不同平台下线程的实现机制不相同&am…

基于Android车载系统模块资料

在从事车载Android应用开发前&#xff0c;必须要对汽车座舱的基本结构有一个大体的认知&#xff0c;只有意识到汽车座舱是一种与手机完全不同的架构&#xff0c;才能更好的助力我们日后学习车载Android应用的开发。下面就来介绍一个比较主流的车载操作系统架构。 注意&#xff…

Unity实现一个可扩展的UGUI无限滑动列表控件

采用 缓存池存储布局坐标 实现的一个可横向或纵向滑动的无限滑动列表 Demo展示&#xff1a; 功能支持&#xff1a; 可以满足大部分如背包&#xff0c;商店商城&#xff0c;工具栏&#xff0c;任务栏窗口等列表功能 支持整个列表刷新或单个对象刷新支持横向多行滑动&#xff…

【Python】快速入门

目录 基础储备 Python输出&#xff1a; Python换行&#xff1a; Python命名规则&#xff1a; Python变量: Python运算&#xff1a; Python注释&#xff1a; 小点&#xff1a; Python的两种模式&#xff1a; Python的用户问答互动程序&#xff1a; Python条件语句 P…

Kubernetes-in-action (一)

Kubernetes-in-action (一) 链接为书内容中对应代码的地址&#xff1a;https://github.com/luksa/kubernetes-in-action 前置之 docker 基础 安装docker使用docker安装镜像、进入镜像&#xff0c;查看进行信息docker build -t kubia . # 使用当前目录的Dockerfile构建镜像&…

m基于Matlab的fir和iir数字滤波器的设计与仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 MATLAB系统供了许多工具箱&#xff08;Toolbox&#xff09;&#xff0c;借助于信号处理工具箱&#xff08;signal processing&#xff09;中的freqz_m&#xff0c;remez等函数&#xff0…

软件测试 | 测试工程师都能看懂的redis,进阶测试开发工程师......

目录&#xff1a;导读前言一、Redis是什么&#xff1f;为啥性能好&#xff1f;二、数据类型&#xff1f;常见的命令&#xff1f;1、String 字符串类型2、Hash 数据类型3、List 链表数据4、Set 无序集合类型5、Zset 有序集合类型三、有几种持久化方式&#xff1f;优缺点?四、数…

Flink-输出算子(Sink)使用

5.5 输出算子 5.5.1 概述 print也是一种输出类PrintSinkFunction 创建了一个PrintSinkFunction操作&#xff0c;然后调用addSink方法的作为传入参数 PrintSinkFunction这个类继承自RichSinkFunction富函数类 RichSourceFunction类 继承了AbstractRichFunction富函数类 …

springboot2整合开发流程示例

1.整体开发逻辑 初始配置示例 开发文件示例 2.开发过程问题 ①默认配置路径 thymeleaf默认解析静态资源路径为 /templates/** ②mybatisplus核心工作原理 mapper继承的BaseMapper中声明了CRUD操作service接口继承的IService接口中抽象方法简单封装了CRUD操作 传入了类&a…

Win10系统如何安装配置maven

【原文链接】Win10系统如何安装配置maven &#xff08;1&#xff09;若未装jdk&#xff0c;可先参考 Win10系统下载安装配置JDK1.8 安装jdk8 &#xff08;2&#xff09;从 maven下载地址 &#xff0c;下载maven&#xff0c;如下&#xff0c;可以下载最新版本&#xff0c;也可…

【JVM】JVM详解

目录一.JVM概述1.jvm简介2.jvm作用3.jvm的内存模型二.类加载器1.类加载器的作用2.加载器的类型3.双亲委派机制的运行过程(面试题)三.JVM内存模块1.方法区2.堆3.栈(虚拟机栈)4.栈(本地方法栈)5.OutOfMemoryError内存溢出和StackOverFlowError栈溢出及解决方法(面试题)(1).OutOfM…

利用ogg微服务版将oracle同步到kafka

ogg微服务版可以再界面上配置抽取、复制进程&#xff0c;不必进入到shell中进行配置&#xff0c;并且图形化界面可以看到更多信息。 系统架构 源端安装ogg for oracle 19C , 目标端安装ogg for bigdata 21C kafka 2.2 数据库&#xff1a;19C 所有软件安装在同台服务器上&#…

操作系统4小时速成:文件管理,文件结构,属性,基本操作,逻辑有无结构,目录结构,文件系统

操作系统4小时速成&#xff1a;文件管理&#xff0c;文件结构&#xff0c;属性&#xff0c;基本操作&#xff0c;逻辑有无结构&#xff0c;目录结构&#xff0c;文件系统 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能…

2397. 被列覆盖的最多行数-深度优先枚举+二进制检索

2397. 被列覆盖的最多行数-深度优先枚举二进制检索 给你一个下标从 0 开始的 m x n 二进制矩阵 mat 和一个整数 cols &#xff0c;表示你需要选出的列数。 如果一行中&#xff0c;所有的 1 都被你选中的列所覆盖&#xff0c;那么我们称这一行 被覆盖 了。 请你返回在选择 co…

Spring Security内部工作原理

定义 Spring 安全性是 Spring提供的一个框架&#xff0c;有助于自定义访问和身份验证过程。它在保护应用程序方面起着非常关键的作用。 Spring 安全性&#xff0c;主要侧重于身份验证和授权&#xff0c;为 Java 应用程序提供所有好处。它非常有用&#xff0c;并提供了一种在实…

抑制细胞代谢紊乱的抑制剂

作者团队发现&#xff0c;缺乏 CD4 T 细胞能保护小鼠免受应激诱导的焦虑样行为&#xff0c;物理应激诱导的白三烯 B4 (LTB4) 触发 CD4 T 细胞中的严重线粒体裂变&#xff0c;进而导致各种行为异常&#xff0c;包括焦虑&#xff0c;抑郁和社交障碍。代谢组和单细胞转录组学显示…