Redis RDB三两事

news2024/9/23 13:28:06

在这里插入图片描述
rdb:将数据库的快照以二进制格式保存在文件中,redis重启后直接加载数据。可以通过savebgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则,例如

save 60 1000
如果60秒内不少于1000个key发生了改动,则生成一个新的rdb文件。
  1. RDB定时逻辑
    1. 若当前程序存在子进程,则检查是否有子进程已执行完成,如果有,则执行对应的父进程进行收尾工作
    2. 检查服务器自从上一次生成RDB后,redis服务器变更了多少个健,若满足以下条件则开始生成RDB文件:
      1. 满足设定的RDB生成配置
      2. 上一次RDB成功生成已过去CONFIG_BGSAVE_RETRY_DELAY(5秒)
  2. RDB持久化进程
    1. fork子进程(bgsave命令创建子进程,save命令则是调用主进程,因此会造成阻塞)

      子进程会“复制”父进程的用户空间作为自己的用户空间,所以子进程和父进程都有自己独立的进程空间(同时会共享部分数据)。fork函数调用一次,会分别在父进程和子进程两处返回。

      1. 创建RDB进程
      2. 尽可能将RDB进程绑定到用户配置的CPU列表bgsave_cpulist上,减少不必要的进程切换,最大程度提高性能。
      3. 生成RDB文件
        1. 打开一个临时文件用于保存数据
        2. 初始化负责读/写文件的函数
        3. 赋值fsync
        4. 将redis数据库的内容写到临时文件中
        5. 重新命名临时文件,替换旧的RDB文件
        6. 更新server相关的RDB属性
      4. 写入RDB数据
        1. 往文件中写入一个RDB标志,标志该文件是RDB文件
        2. 写入辅助字段,如版本号、创建时间……
        3. 将数据字典以外的数据保存到RDB中
        4. 遍历所有的数据库
        5. 写入RDB_OPCODE_SELECTDB标志和数据库ID
        6. 写入RDB_OPCODE_RESIZEDB标志和数据库字典大小、过期字典大小
        7. 遍历数据库的键值对,将键值对和过期时间写入RDB中
          1. 若是过期时间则写入过期标志和过期时间戳
          2. 若是LRU或LFU则记录空闲时间或LFU计数
          3. 写入键值对标志,再写健内容再写值内容
        8. 将redis中的lua脚本写入RDB文件
        9. 写入结束标志
        10. 写入校验码
      5. 退出RDB进程
      6. 更新server的运行时数据
    2. 父进程收尾

      1. 检查是否存在已结束的子进程
      2. 获取子进程的结束代码和中断信号,根据这些标志做不同的逻辑处理
      3. 如果子进程是RDB进程,RDB数据保存成功后,需将RDB文件发送给正在同步的从服务器
    3. RDB文件加载过程

      1. 读取RDB文件里的RDB标志
      2. 分析RDB文件。首先读取字节码,再根据标志字节进行相应的处理。
      3. 读取键值对,转换为redisObject
      4. 如果读取到健已过期,且当前服务器是主节点,则删除该健
      5. 将读取的键值对加入数据字典中
      6. 若redis版本大于5还需检查校验码

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

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

相关文章

苹果电脑能玩Steam游戏吗?Steam对苹果笔记本要求高吗 steam苹果下载安装教程

对于游戏爱好者而言,如何在Mac上安装并使用Steam玩游戏成为一个重要的问题,Steam作为全球最大的数字发行平台和游戏社区,为玩家提供了丰富的游戏资源和社交交流平台。然而,由于Mac和Windows系统之间存在差异,很多人不确…

Linux进程间通信方式对比

参考: Linux进程间通信总结-百度开发者中心 Linux操作系统提供了多种进程间通信(IPC)的方式,每种方式都有其独特的应用场景和优缺点。下面将对Linux下的进程间通信方式进行总结和比较。 管道(Pipe) 管道是最…

小白学大模型:GLM 调用教程

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些…

计算机网络:DNS、子网掩码、网关

参考: https://blog.csdn.net/weixin_55255438/article/details/123074896 https://zhuanlan.zhihu.com/p/65226634 在计算机网络中,DNS(Domain Name System,域名系统)、子网掩码(Subnet Mask)…

优化RoBERTa:在AMD上使用混合精度进行微调

Optimizing RoBERTa: Fine-Tuning with Mixed Precision on AMD — ROCm Blogs 简介 在这篇博客中,我们将探讨如何微调鲁棒优化的BERT预训练方法([RoBERTa](https://arxiv.org/abs/1907.11692))大型语言模型,重点在于PyTorch的混…

遥感之大豆提取

主要记录大豆提取常用的光学以及sar等特征&#xff0c;以便在实验中实现考虑以下特征得到初步结果&#xff0c;在其基础上进行不同维度的优化。 参考文献**<Mapping annual 10-m soybean cropland with spatiotemporal sample migration>** 文档总体描述&#xff1a; …

Java类的加载器分类

启动类加载器 使用-XX:TraceClassLoading参数得到 扩展类加载器 应用程序类加载器 用户自定义类加载器 测试不同类的加载器

高性能web服务器--nginx

下载nginx [rootnginx ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz [rootnginx ~]# tar zxf nginx-1.24.0.tar.gz创建nginx用户 [rootnginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx先安装依赖 dnf install gcc pcre-devel zlib-devel openssl-d…

来了...腾讯内推的软件测试面试PDF 文档(共107页)

不多说&#xff0c;直接上干货&#xff08;展示部分以腾讯面试纲要为例&#xff09;完整版文末领取 通过大数据总结发现&#xff0c;其实软件测试岗的面试都是差不多的。常问的有下面这几块知识点&#xff1a; 全网首发-涵盖16个技术栈 第一部分&#xff0c;测试理论&#x…

C++:平衡二叉搜索树之红黑树

一、红黑树的概念 红黑树&#xff0c; 和AVL都是二叉搜索树&#xff0c; 红黑树通过在每个节点上增加一个储存位表示节点的颜色&#xff0c; 可以是RED或者BLACK&#xff0c; 通过任何一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树能够确保没有一条路径会比…

黑马头条vue2.0项目实战(九)——编辑用户资料

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示用户信息 4. 修改昵称 5. 修改性别 6. 修改生日 7. 修改头像 7.1 图片上传预览 7.2 使用纯客户端的方式处理用户头像上传预览 7.3 头像裁切 7.4 纯客户端的图片裁切上传流程 7.5 Cropper.js 图片裁剪器的基本使用 …

盘点.软件测试工程师常见的面试题。面试官说我要定你了!

今天我们来聊聊软件测试工程师的面试题有哪些&#xff0c;2024年的8月份马上就过完了&#xff0c;金九银十就业季&#xff0c;跳槽季马上又要来了&#xff0c;毕竟在面试的战场上&#xff0c;知己知彼方能百战不殆。嗯嗯&#xff0c;不错说的真好&#xff01; 1、您所熟悉的测试…

24/8/15算法笔记 项目练习冰湖

import gym from matplotlib import pyplot as plt %matplotlib inline import os os.environ[SDL_VIDEODRIVER]dummy #设置环境变量 SDL_VIDEODRIVERdummy 是在使用基于 SDL (Simple DirectMedia Layer) 的应用程序时&#xff0c;告诉应用程序不使用任何视频驱动程序。这通常…

云计算实训29——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现

一、mysql主从复制及同步 1、mysql主从自动开机同步 2、配置mysql5.7版本 mysql-5.7.44-linux-glibc2.12-x86_64.tar 启动服务、登录 对数据库进行基本操作 3、使用python操纵mysql数据库 4、编辑python脚本自动化操纵mysql数据库 二、mycat读写分离实现 1.上传jdk和mycat安装…

【C语言】双链表

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、什么是双链表&#xff1f; 二、双链表温习 1. 双链表的结构…

Windows 11 Build 27686 上手体验:2TB FAT32、更好的沙盒等功能

Windows 11 Build 27686 现已在 Insider Program 的 Canary 频道发布&#xff0c;其中包含一些有趣的内容。该版本确认了微软更改 FAT32 大小限制的计划&#xff0c;并将其大小限制从 32GB 提高到 2TB。与此同时&#xff0c;沙盒也得到了改进。让我们来详细了解一下此次更新。 …

Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

1.怪物的动画逻辑一览 2.怪物的受伤死亡逻辑一览 using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine;public class Monster : MonoBehaviour {[Header("速度")]public float normalSpeed;public float chaseSpeed;…

Xinstall神器来袭:落地页与App无缝衔接,用户转化不再是难题

在移动互联网时代&#xff0c;App的推广与运营成为了各行各业的关键一环。然而&#xff0c;许多推广者在落地页跳转App这一环节上遇到了不小的挑战。用户点击落地页后&#xff0c;往往需要经过繁琐的步骤才能跳转到App&#xff0c;这不仅降低了用户体验&#xff0c;还严重影响了…

红明谷CTF 2022

MissingFile 前置知识 DPAPI&#xff1a; 全称&#xff1a;Data Protection Application Programming Interface DPAPI blob 一段密文&#xff0c;可以使用Master Key对其解密 Master Key 64字节&#xff0c;用于解密DPAPI blob&#xff0c;使用用户登录密码、SID和16字…

周易测算系统前景分析

周易测算系统作为一种结合传统文化与现代技术的服务平台。其市场前景分析如下&#xff1a; 市场需求增长&#xff1a;随着人们对传统文化的重视和对个性化服务的追求&#xff0c;周易测算系统市场需求正逐渐增长。特别是在互联网的背景下&#xff0c;周易预测服务与互联网的结…