Redis中RDB中的文件写入

RDB文件的创建与载入。

有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE.
SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器
不能处理任何命令请求:

127.0.0.1:6379> save
OK

和SAVE命令直接阻塞服务器进程的做法不同,BGSAVE命令会派生出一个子进程,然后由子进程负责
创建RDB文件,服务器进程(父进程)继续处理命令请求:

127.0.0.1:6379> BGSAVE
Background saving started

SAVE和BGSAVE的区别

创建RDB文件的实际工作由rdb.c/rdbSave函数完成,SAVE命令和BGSAVE命令会以不同的方式调用这个函数,通过以下伪代码可以明显地看出这两个命令之间的区别:

def SAVE():# 创建RDB文件rdbSave()def BGSAVE():# 创建子进程pid = fork()if pid == 0:# 子进程负责创建RDB文件rdbSave()# 完成之后向父进程发送信号signal_parent();elif pid > 0:# 父进程继续处理命令请求,并通过轮询等待子进程的信号handle_request_and_wait_signal()else:# 处理出错情况

文件载入

和使用SAVE命令或者BGSAVE命令创建RDB文件不同,RDB文件的载入工作是在服务器启动自动执行的,所以Redis并没有专门用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动z载入RDB文件。以下时Redis服务器启动时打印的日志记录,其中第二条日志DB loaded from disk…就是服务器在成功RDB文件之后打印的:

[95568] 24 Mar 12:01:29.565 # Server started, Redis version 3.0.504
[95568] 24 Mar 12:01:29.565 * DB loaded from disk: 0.000 seconds
[95568] 24 Mar 12:01:29.566 * The server is now ready to accept connections on port 6379

注意

值得一提的是,因为AOF文件的更新频率通常比RDB文件的更新频率高,所以:

  • 1.如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态
  • 2.只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态。
    服务器判断该用哪个文件来还原数据库状态的流程如图所示。
    在这里插入图片描述

服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入共工作完成为止。
载入RDB文件的实际工作由rdb.c/rdbLoad函数完成,这个函数和rdbSave函数之间的关系
可以用图表示
在这里插入图片描述

SAVE命令执行时的服务器状态.

当SAVE命令执行时,Redis服务器会被阻塞,所以当SAVE命令正在执行时,客户端发送的
所有命令请求都会被阻塞。只有在服务器执行完SAVE命令、重新开始接受命令请求之后,客户端
发送的命令才会被处理

BGSAVE命令执行时的服务器状态

因为BGSAVE的保存工作是由子进程执行的,所以在子进程创建RDB文件的过程中,Redis服务器
仍然可以继续处理客户端的命令请求,但是,在BGSAVE命令执行期间,服务器处理SAVE、BGSAVE、BGREWRITEAOF三个命令的方式会和平时有所不同.
首先,在BGSAVE命令执行期间,客户端发送的SAVE命令会被服务器拒绝,服务器禁止SAVE命令和BGSAVE命令执行是为了避免父进程(服务器进程)和子进程同时执行两个rdbSave调用,防止产生竞争条件。其次,在BGSAVE命令执行期间,客户端发送的BGSAVE命令会被服务器拒绝,因为同时执行两个BGSAVE会被服务器拒绝,因为同时执行两个BGSAVE命令也会产生竞争条件,代码如下

127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> BGSAVE
(error) ERR Background save already in progress

最后,BGREWRITEAOF和BGSAVE两个命令不能同时执行:

  • 1.如果BGSAVE命令正在z执行,那么客户端发送的BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕之后执行
  • 2.如果BGREWRITEAOF和BGSAVE两个命令的实际工作都由子进程执行,所以这两个命令在操作方面并没有什么冲突的地方,不能同时执行它们只是一个性能方面的考虑——并发出两个子进程,并且这两个子进程都同时执行大量的磁盘写入操作

自动间隔保存

当Redis服务器启动时,用户可以通过指定配置文件或者传入启动参数的方式设置save选项,
如果用户没有主动设置save选项,那么服务器会为save选项设置默认条件:

save 900 1
save 300 10
save 60 10000

接着,服务器程序会根据save选项所设置的保存条件,设置服务器状态redisServer结构的saveparams
属性:

struct redisServer {// ...// 记录了保存条件的数组struct saveparam *saveparams;// ...
};

saveparams属性是一个数组,数组中的每隔元素是一个saveparam结构,每隔saveparam结构都保存了一个save选项设置的保存ll额一个save选项设置的保存条件:

struct saveparam {// 秒数time_t seconds;// 修改int changes;
};

例子

举个例子,比如说,如果save选项的值为以下条件

save 900 1
save 300 10
save 60 10000

那么服务器状态中的saveparams数组将会是如图所示
在这里插入图片描述

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

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

相关文章

枚举的详解

枚举的讲解 在C语言中,没有内置的枚举(enum)数据类型,但我们可以使用整数类型来模拟枚举的行为。C99标准之前,C语言使用#define指令来定义枚举,但这种方式并不安全,因为如果枚举值发生变化&…

Ubuntu Desktop Server - user 用户与 root 用户切换

Ubuntu Desktop Server - user 用户与 root 用户切换 1. user 用户与 root 用户切换2. root 用户与 user 用户切换References 1. user 用户与 root 用户切换 strongforeverstrong:~$ strongforeverstrong:~$ sudo su [sudo] password for strong: rootforeverstrong:/home/s…

【matlab程序】海洋资料的获取与分析--AO/NAO

海洋资料的获取与分析 相关数据代码等资料已上传入群中 海洋资料下载和介绍 AO和NAO指数均取自美国气候预测中心(Climate Prediction Center, CPC)发布的月平均指数,时间跨度为1950-2022年。由于AO和NAO在冬季最强,因此本文选取…

trt | torch2trt的使用方式

一、安装 1. 安装 tensorrt python 接口 下载 trt 包 .tar.gz https://developer.nvidia.com/nvidia-tensorrt-5x-download 解压 tar xvf TensorRT-6.0.1.5.Ubuntu-18.04.x86_64-gnu.cuda-10.1.cudnn7.6.tar.gz 安装 trt python 接口 cd pythonpip install tensorrt-6.0…

springboot结合mongodb使用(一)

配置连接 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>${spring.boot.version}</version></dependency>#mongodb 这里是没有设置密码sprin…

406. 根据身高重建队列(力扣LeetCode)

文章目录 406. 根据身高重建队列题目描述贪心算法代码 406. 根据身高重建队列 题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &…

阿里云倚天云服务器怎么样?如何收费?

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

2024.3.22FunPlus客户端开发工程师笔试记录

仅做笔试记录之用。 FunPlus客户端开发工程师笔试分为以下题型&#xff1a; 15道单选、5道多选、5道填空、2道编程 相比起上次考多益的时候&#xff0c;确实是感觉轻松多了。可能是选择题难度比起上次更简单的原因。这次的考题出的相对更加全面&#xff0c;但是同时显现出的就…

macOS访问samba文件夹的正确姿势,在哪里更改“macOS的连接身份“?还真不好找!

环境&#xff1a;路由器上需要身份认证的Mini NAS macOS Sonoma 14 这是一个非常简单的问题&#xff0c;但解决方法却藏得比较深&#xff0c;不够直观&#xff0c;GPT也没有给出明确的解决提示&#xff0c;特意记录一下。 macOS很多地方都很自动&#xff0c;有时候让人找不到设…

基于单片机的语音识别智能窗帘控制器的设计

摘要 系统以单片机STC89C52 芯片作为主控模块,可以对窗帘实现光照度检测、语音识别、 按键手动等智能控制功能。光照度模块采集室外光照度数据上传至单片机,单片机发送控制指令 驱动步进电动机驱动模块,控制步进电动机转动实现窗帘的自动开合,LCD 显示屏显示实时的温 度和时…

3.20日哈啰面试纪要

1.介绍自己&#xff0c;巴拉巴拉 2.面试官谈到了redis 问&#xff1a;redis在项目中你们主要用来干什么的&#xff1f; 答&#xff1a;分布式锁、存储图标信息 问&#xff1a;你们hash类型主要用来做什么&#xff1f; 答&#xff1a;主要用来存储token 问&#xff1a;token不应…

高中信息技术教资刷题笔记_大题篇

1.选择排序 2. SMTP属于TCP/IP协议体系结构中的哪一层&#xff1f;请列出其通信的三个阶段。 3.高中信息技术课程的基本理念/意义 4.视频作品制作和发布的主要环节 5.信息社会责任内涵及学生表现 6.教学活动意图 ①突出学生的主体地位。材料中&#xff0c;王老师设计的“扮演谍…

mac安装openresty

官方地址&#xff1a;https://openresty.org/cn/download.html brew update brew install pcre openssl下载源码 https://openresty.org/download/openresty-1.25.3.1.tar.gz解压源码 tar -zxvf openresty-1.25.3.1.tar.gz进入解压后的目录 ./configure --prefix/opt/openr…

johnson最短路模板(未完成,自用)

johnson最短路 https://www.starrycoding.com/problem/100 关键就在于&#xff0c;解决dijkstra不能处理负权值的问题&#xff0c;先用spfa或者bellman-ford得到所有点到虚点的最短距离&#xff0c;可以称之为势能。然后通过势能对所有边进行处理&#xff0c;处理过后保证了所…

代码随想录算法训练营Day56 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

647. 回文子串 dp[i][j]表示第i位开始&#xff0c;第j位结束的字符串是否为回文串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1…

WSL2 (Ubuntu 22.04.3 LTS)安装docker

文章目录 前言一、安装二、总结 前言 在wsl2(Ubuntu 22.04.3 LTS)中安装docker。 一、安装 安装过程主要参考了&#xff1a;ubuntu安装docker下面主要安装命令&#xff0c;执行完便可完成docker的安装。 检查卸载老版本docker $ apt-get remove docker docker-engine docker…

大数据分布式计算引擎用虚拟CPU的核心原因?

两个核心原因&#xff1a; 第一&#xff1a;为了屏蔽不同服务器之间的CPU算力差异。 第二&#xff1a;为了增加集群可提交的任务数量以及提高单个CPU的使用效率。 当我们做大数据开发用分布式计算引擎提交任务时&#xff0c;一般都会给每个提交的任务分配对应的内存和CPU资源。…

深入理解与使用go之函数与方法--使用

深入理解与使用go之函数与方法–理解与使用 文章目录 引子函数与方法分类函数函数入参普通参数可变参数默认值返回命名不带命名带命名讨论init 函数defer 函数方法值接收指针接收构造函数引子 在 Go 语言中,函数被视为一等公民(First-Class Citizens),这意味着函数可以像其…

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参…

c#矩阵求逆

目录 一、矩阵求逆的数学方法 1、伴随矩阵法 2、初等变换法 3、分块矩阵法 4、定义法 二、矩阵求逆C#代码 1、伴随矩阵法求指定3*3阶数矩阵的逆矩阵 &#xff08;1&#xff09;伴随矩阵数学方法 &#xff08;2&#xff09;代码 &#xff08;3&#xff09;计算 2、对…