Redis RDB三两事

rdb:将数据库的快照以二进制格式保存在文件中,redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则,例如
save 60 1000
如果60秒内不少于1000个key发生了改动,则生成一个新的rdb文件。
- RDB定时逻辑
- 若当前程序存在子进程,则检查是否有子进程已执行完成,如果有,则执行对应的父进程进行收尾工作
- 检查服务器自从上一次生成RDB后,redis服务器变更了多少个健,若满足以下条件则开始生成RDB文件:
- 满足设定的RDB生成配置
- 上一次RDB成功生成已过去CONFIG_BGSAVE_RETRY_DELAY(5秒)
- RDB持久化进程
-
fork子进程(bgsave命令创建子进程,save命令则是调用主进程,因此会造成阻塞)
子进程会“复制”父进程的用户空间作为自己的用户空间,所以子进程和父进程都有自己独立的进程空间(同时会共享部分数据)。fork函数调用一次,会分别在父进程和子进程两处返回。
- 创建RDB进程
- 尽可能将RDB进程绑定到用户配置的CPU列表bgsave_cpulist上,减少不必要的进程切换,最大程度提高性能。
- 生成RDB文件
- 打开一个临时文件用于保存数据
- 初始化负责读/写文件的函数
- 赋值fsync
- 将redis数据库的内容写到临时文件中
- 重新命名临时文件,替换旧的RDB文件
- 更新server相关的RDB属性
- 写入RDB数据
- 往文件中写入一个RDB标志,标志该文件是RDB文件
- 写入辅助字段,如版本号、创建时间……
- 将数据字典以外的数据保存到RDB中
- 遍历所有的数据库
- 写入RDB_OPCODE_SELECTDB标志和数据库ID
- 写入RDB_OPCODE_RESIZEDB标志和数据库字典大小、过期字典大小
- 遍历数据库的键值对,将键值对和过期时间写入RDB中
- 若是过期时间则写入过期标志和过期时间戳
- 若是LRU或LFU则记录空闲时间或LFU计数
- 写入键值对标志,再写健内容再写值内容
- 将redis中的lua脚本写入RDB文件
- 写入结束标志
- 写入校验码
- 退出RDB进程
- 更新server的运行时数据
-
父进程收尾
- 检查是否存在已结束的子进程
- 获取子进程的结束代码和中断信号,根据这些标志做不同的逻辑处理
- 如果子进程是RDB进程,RDB数据保存成功后,需将RDB文件发送给正在同步的从服务器
-
RDB文件加载过程
- 读取RDB文件里的RDB标志
- 分析RDB文件。首先读取字节码,再根据标志字节进行相应的处理。
- 读取键值对,转换为redisObject
- 如果读取到健已过期,且当前服务器是主节点,则删除该健
- 将读取的键值对加入数据字典中
- 若redis版本大于5还需检查校验码
-
相关文章:
Redis RDB三两事
rdb:将数据库的快照以二进制格式保存在文件中,redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则,例如 save 60 1000 如果60秒内不少于1000个key发生了改动,则生成一个新的rdb文件…...
分布式高可用架构设计
一、限流 1、单机限流 如图,应用C的资源c/x被上游的应用A和应用C并发访问,应用C的系统能力支持c/x资源最高5000/qps的访问量;为了不让高并发流量或尖峰流量压垮应用C,可以针对应用C的资源c/x做限流;比如设置限流4500…...
GATK SampleList接口介绍
在 GATK 中,SampleList 是一个接口,用于表示一个样本列表。这些样本通常是在基因组分析过程中被处理的不同生物样本。SampleList 接口提供了访问这些样本的一些基本方法,通常用于多样本分析任务,比如变异检测或基因组重测序。 SampleList 接口的方法 SampleList 接口定义…...
00后是真卷不过,工作没两年,跳槽到我们公司起薪20K都快接近我了
在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...
树莓派Pico C/C++ 开发环境搭建(一键完成版)
树莓派Pico C/C 开发环境搭建(一键完成版) 因为之前使用过MicroPython开发过树莓派Pico,总觉得用起来怪怪的。正好最近树莓怕发布了新一代的MCU——RP2350,之前的RP2040在各个平台都有所降价,因此,买了几块。同时因为之前是玩stm…...
【计算机组成原理】二、数据的表示和运算:1.数值与编码(十进制二进制转换、BCD码、ASCII码、汉字编码、奇偶校验码、循环冗余检测CRC、海明码)
二、数据的表示和运算 文章目录 二、数据的表示和运算1.数值与编码1.1数据存储和排列❗1.2十进制转换1.2.1整数1.2.2小数 1.3二进制转换1.3.1 B->O1.3.2 B->H 1.4真值&机器数1.5 BCD码1.6 ASCII码1.7汉字与GBK1.8 UTF1.9检错码1.9.1奇偶校验码1.9.2循环冗余检测CRC1.…...
汇编语言中的艺术:数据压缩与解压缩技术
标题:汇编语言中的艺术:数据压缩与解压缩技术 数据压缩是计算机科学中的一项基本技术,它通过减少数据的冗余来降低存储或传输所需的空间。在低级语言如汇编语言中实现数据压缩和解压缩,不仅是一种技术挑战,也是对硬件…...
【Alibaba Cola 状态机】重点解析以及实践案例
【Alibaba Cola 状态机】重点解析以及实践案例 1. 状态模式 状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为,简单地讲就是,一个拥有状态的context对象,在不同状态下,其行为会发生改变。看起来是改…...
购买商城源码前需要考虑哪些方面?
前言 购买商城源码前需要考虑的方面包括功能满足、技术兼容性、可扩展性、公司实力、客户评价、安全性与稳定性等。 购买商城源码是一项重要决策,需要综合考虑多个因素。以下是详细的考虑方面: 1.功能满足: 确保所选的源码能够支持企业所…...
MongoDB快速入门CRUD
1. 数据库管理 1.1 切换数据库 切换到名为 myDatabase 的数据库。如果该数据库不存在,MongoDB 会在第一次写入数据时自动创建它。 use myDatabase;1.2 查看当前数据库 显示当前使用的数据库的名称。 db; 1.3 显示所有数据库 列出当前 MongoDB 实例中的所有数…...
【python基础】—利用pandas读取或写入mysql表数据
文章目录 一、read_sql()二、to_sql()三、连接数据库方式—MySQL1、用sqlalchemy包构建数据库链接2、用DBAPI构建数据库链接 四、容易遇到的问题 一、read_sql() 功能 将 SQL 查询/数据库表读入 DataFrame。 语法 读取数据库(通过SQL语句或表名) pand…...
C/C++信号量
文章目录 一、信号量介绍1.1 什么是信号量1.2 信号量的原子性1.3 信号量的使用 二、C语言使用2.1 函数接口2.2 信号量代码 三、C20使用3.1 函数接口 四、C11模拟信号量 一、信号量介绍 1.1 什么是信号量 信号量是一种特殊的变量,是操作系统层面的,可以…...
SSL Pining 问题解决方案
实战案例 为了能够更好的复现 SSL Pining 场景,我们对一个 App(https:app4.scrape.center)进行抓包,这个 App 包含了 SSL Pining 的相关设置,如果我们将手机的代理设置为抓包软件提供的代理服务,那么这个 …...
【Spring Boot】全局异常处理
目录 背景 前言 设计步骤 1.定义异常信息类: 2.自定义异常: 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中,如何处理全局异常的,也就是如何捕获全局异…...
安全基础学习-SM3加密算法
SM3是一种广泛使用在中国国家标准中的哈希算法,全称为“中国国家密码算法SM3”。它由中国国家密码管理局制定,主要用于数字签名和消息完整性验证。SM3算法与SHA-256在结构上类似,但其设计具有特定的改进以增强安全性。 SM3算法生成256位的哈希值,使用了32轮的迭代运算,并…...
MySQL中处理JSON数据:大数据分析的新方向
1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…...
K8S 容器调度
在Kubernetes中,容器调度是一个自动化的过程,负责将容器(在Kubernetes中称为Pod)分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器(kube-scheduler)控制,它通过一系列算法和策略来确…...
C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。
C Primer(第5版) 练习 17.2 练习 17.2 定义一个tuple,保存一个string、一个vector和一个pair<string, int>。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /**********************…...
外观检测设备真的能提高生产效率吗?
零部件外观检测设备是一种专业的设备,用于对各类零部件的外观进行检测和评估。现代制造业中扮演着重要的角色,能够有效提升产品质量,确保产品符合国家标准和客户需求。 首先,零部件外观检测设备具备高精度和高效率的特点。通过采用…...
ant design pro 中用户的表单如何控制多个角色
ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时,…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
AT模式下的全局锁冲突如何解决?
一、全局锁冲突解决方案 1. 业务层重试机制(推荐方案) Service public class OrderService {GlobalTransactionalRetryable(maxAttempts 3, backoff Backoff(delay 100))public void createOrder(OrderDTO order) {// 库存扣减(自动加全…...
可视化预警系统:如何实现生产风险的实时监控?
在生产环境中,风险无处不在,而传统的监控方式往往只能事后补救,难以做到提前预警。但如今,可视化预警系统正在改变这一切!它能够实时收集和分析生产数据,通过直观的图表和警报,让管理者第一时间…...
