当前位置: 首页 > news >正文

Redis_写时复制(cow)

Redis会根据配置,每隔一段时间中对Redis服务中当下的数据集进行快照。配置自动生成rdb文件,后台使用的是bgsave方式。

save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可

Redis借助操作系统提供的写时复制技术(Copy-On-Write, COW),在生成快照的同时,依然可以正常处理写命令。具体原理看下文介绍。

bgsave流程

  1. Fork子进程:
  • 主进程调用fork() 创建一个子进程。
  • 子进程和主进程共享相同的内存空间。
  1. 子进程生成RDB文件:
  • 子进程根据fork时刻的数据快照生成RDB文件。
  • 子进程只读取fork时刻的数据,不会读取之后的新数据。
  1. 主进程继续处理写操作:
  • 主进程继续处理客户端发来的写操作。
  • 对于写操作,主进程使用写时复制(Copy-On-Write, COW)机制,修改的数据所在的页,复制一份,将新数据写入新的内存区域。
  1. 替换现有RDB文件:
  • 子进程完成RDB文件生成后,通知主进程。
  • 主进程将临时文件重命名为正式的RDB文件。

对新写入数据的处理

  1. Fork时刻的数据快照:
  • 子进程生成的RDB文件包含了 fork 时刻的数据快照。
  • 这意味着从fork时刻到RDB文件生成完成这段时间内的新写入数据不会被包含在当前RDB文件中。
  1. 新写入数据的处理:
  • 主进程在fork之后接收到的所有写操作都会被记录在内存中。
  • 这些新写入的数据会存储在新的内存区域中,不会影响子进程生成的RDB文件。

示例说明

假设主进程在 fork 时刻的状态如下:

Key: "foo" Value: "bar"
  • Fork 子进程:
    子进程和主进程共享内存中的 “foo”: “bar”。
  • 主进程写操作:
    主进程接收到一个写操作:SET foo baz。
  • 写时复制:
    主进程为 “foo” 分配新的内存空间,并将值从 “bar” 改为 “baz”。
    此时内存状态变为:
Key: "foo" Value: "bar"  // 子进程可见
Key: "foo" Value: "baz"  // 主进程可见  
  • 子进程生成RDB文件:
    子进程读取 “foo”: “bar” 并生成RDB文件。
  • 替换现有RDB文件:
    子进程完成RDB文件生成后,主进程用新的RDB文件替换旧文件。

后续处理

新RDB文件生成:

下一次执行 bgsave 时,新的RDB文件将会包含最新的数据快照,包括之前写入的数据。

AOF日志:

如果Redis配置了AOF(Append Only File)持久化模式,所有写操作都会被记录在AOF文件中。
即使RDB文件不包含最新的数据,AOF文件也会确保数据的一致性和完整性。

总结

  • RDB快照:bgsave 生成的是 fork 时刻的数据快照,不包含fork之后的新写入数据。
  • 写时复制:主进程在 fork 之后的新写入数据会存储在新的内存区域中。
  • 后续处理:下一次 bgsave 会包含最新的数据快照。
  • AOF日志:如果启用AOF模式,所有写操作都会被记录在AOF文件中,确保数据的一致性和完整性。
    这种方式保证了RDB文件的一致性和高可用性,同时也提供了AOF模式作为补充,确保数据的完整性和一致性。

欢迎关注:鲁班曰

参考文献

Redis写时拷贝(COW)总结
Redis的写时复制(Copy On Write),你真的了解么?

相关文章:

Redis_写时复制(cow)

Redis会根据配置,每隔一段时间中对Redis服务中当下的数据集进行快照。配置自动生成rdb文件,后台使用的是bgsave方式。 save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可Redis借助操作系统提供的写时复制技术(Copy-On-Write, COW…...

【mysql进阶】4-5. InnoDB 内存结构

InnoDB 内存结构 1 InnoDB存储引擎中内存结构的主要组成部分有哪些? 🔍 分析过程 从官⽹给出的InnoDB架构图中可以找到答案 InnoDB存储引擎架构链接:https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html ✅ 解答问题 InnoD…...

从零入门扣子Bot开发

从零入门扣子Bot开发 工作流简单介绍问题思考工作流实例 图像流简单介绍瘦脸图像流的设计创建图像流设计流程 总结参考链接 工作流简单介绍 工作流起源于生产组织和办公自动化领域,是指在计算机应用环境下,对业务过程的部分或整体进行自动化处理。它通过…...

中药是怎么计价的 复制药方文本划价系统操作教程

一、概述 【软件资源文件下载可以点文章最后卡片】 通过复制药方文本,快速划价并计算出总金额。 可以保存记录,如日期,客户名称,药方名称,金额等,便于查询统计或导出表格。 中药划价系统怎么收费 中药是…...

怎么做网站?

现代网站建设涵盖了多个方面,远不仅仅是简单的网站制作。如果您有兴趣创建网站或者想了解如何建立一个成功的网站,那么您需要了解众多与之相关的关键要素。本文将为您详细介绍这些要素。 选域名:域名是您网站的标识,因此选择一个…...

Centos Stream 9部署Zabbix7.0LTS

目录 1. 系统环境1.1 编辑配置文件/etc/yum.repos.d/epel.repo1.2 安装Zabbix存储库1.3 安装Zabbix server,Web前端,agent 2. MySQL/MariaDB 数据库2.1安装和配置 MySQL/MariaDB 数据库2.2 创建初始数据库2.3 导入初始架构和数据,系统将提示您…...

深入理解Allan方差:用体重数据分析误差的时间尺度与稳定性

文章目录 1. 什么是Allan方差?Allan方差的特点 2. Allan方差与传统方差的区别3. 用体重数据举例分析波动性场景A:体重变化较平稳场景B:体重变化波动较大 4. Allan方差的计算公式与详细步骤5. 不同时间块长度下的Allan方差计算场景A的Allan方差…...

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎,广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建,支持 RESTful 风格的 API,使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理,特别是其倒排…...

数字后端零基础入门系列 | Innovus零基础LAB学习Day5

###Module 12 RC参数提取和时序分析 数字后端零基础入门系列 | Innovus零基础LAB学习Day4 数字后端零基础入门系列 | Innovus零基础LAB学习Day3 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字后端零基础入门系列 | Innovus零基础LAB学习Day1 ###LAB12-1 这个章节…...

Redis 内存回收策略小结

Redis 内存回收策略 及时回收内存中不需要的数据,能有效地保持性能和防止内存溢出。Redis内存回收主要有两种场景 删除过期的键值对内存使用达到maxmemory时触发回收策略 删除过期的键值对 惰性删除: 在查询时如果发现 该键值对已经过期则执行删除操作…...

React常用前端框架合集

React 是 Facebook 开发的一款用于构建用户界面的 JavaScript 库。由于其高效、灵活的特性,React 成为了目前最流行的前端框架之一。为了帮助开发者更好地利用 React 构建应用,市场上涌现了许多优秀的辅助工具和框架。本文将详细介绍几个常用的 React 前…...

python对文件的读写操作

任务:读取文件夹下的批量txt数据,并将其写入到对应的word文档中。 txt文件中包含:编号、报告内容和表格数据。写入到word当中:编号、报告内容、表格数据、人格雷达图以及对应的详细说明(详细说明是根据表格中的标识那一列中的加号…...

Redis工具类(解决缓存穿透、缓存击穿)

文章目录 前言IBloomFilterObjectMapUtilsCacheClient使用示例具体业务的布隆过滤器控制层服务层 前言 该工具类包含以下功能: 1.将任意对象存储在 hash 类型的 key 中,并可以设置 TTL 2.将任意对象存储在 hash 类型的 key 中,并且可以设置…...

Air780E量产binpkg文件的获取方法

Air780E量产binpkg文件如何获取呢?操作方法如下。 一、背景 最近luatos开发客户增多,客户在量产烧录的时候需要binpkg文件,但是有些客户不知道binpkg文件是什么,在哪里获取,是否可以用soc文件提取出来,使…...

C++STL之stack

1.stack的使用 函数说明 接口说明 stack() 构造空的栈 empty() 检测 stack 是否为空 size() 返回 stack 中元素的个数 top() 返回栈顶元素的引用 push() 将元素 val 压入 stack 中 pop() 将 stack 中尾部的元素弹出 2.stack的模拟实现 #include<vector> namespace abc { …...

git的学习之远程进行操作

1.代码托管GitHub&#xff1a;充当中央服务器仓库的角色 2.git远程进行操作 3.配置本地服务器的公钥 4.推送 5.git远程操作 pull .gitignore 6.给命令配置别名 git config --global alias.st status 7.标签管理 git tag -a [name] -m "XXX" [commit_id] 操作标签…...

蓝桥杯普及题

[蓝桥杯 2024 省 B] 好数 题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N N N,请计算从 1 1...

Spreadsheet导出excel

记录下常用的方法 数字转字符&#xff1a;Coordinate::stringFromColumnIndex(27); 输出 AA字符转数字&#xff1a;Coordinate::columnIndexFromString(AA); 输出27设置单元格式 eg:(设置为保留两位小数点) $sheet->getStyle($columnLetter)->getNumberFormat()->set…...

Leetcode|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

15.三数之和 哈希解法&#xff1a; 用俩个for循环求出&#xff0c;所需的a和b&#xff0c;再用哈希表&#xff0c;判断剩余的那个c是否在数组 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>…...

使用ceph-csi把ceph-fs做为k8s的storageclass使用

背景 ceph三节点集群除了做为对象存储使用&#xff0c;计划使用cephfs替代掉k8s里面现有的nfs-storageclass。 思路 整体实现参考ceph官方的ceph csi实现&#xff0c;这套环境是arm架构的&#xff0c;即ceph和k8s都是在arm上实现。实测下来也兼容。 ceph-fs有两种两种挂载方…...

太速科技-212-RCP-601 CPCI刀片计算机

RCP-601 CPCI刀片计算机 一、产品简介 RCP-601是一款基于Intel i7双核四线程的高性能CPCI刀片式计算机&#xff0c;同时&#xff0c;将CPCI产品的欧卡结构及其可靠性、可维护性、可管理性与计算机的抗振动、抗冲击、抗宽温环境急剧变化等恶劣环境特性进行融合。产品特别…...

【解决 Windows 下 SSH “Bad owner or permissions“ 错误及端口转发问题详解】

使用 Windows 连接远程服务器出现 Bad owner or permissions 错误及解决方案 在 Windows 系统上连接远程服务器时&#xff0c;使用 SSH 可能会遇到以下错误&#xff1a; Bad owner or permissions on C:\Users\username/.ssh/config这个问题通常是由于 SSH 配置文件 .ssh/con…...

使用预训练的BERT进行金融领域问答

获取更多完整项目代码数据集&#xff0c;点此加入免费社区群 &#xff1a; 首页-置顶必看 1. 项目简介 本项目旨在开发并优化一个基于预训练BERT模型的问答系统&#xff0c;专注于金融领域的应用。随着金融市场信息复杂性和规模的增加&#xff0c;传统的信息检索方法难以高效…...

ReactOS系统中MM_REGION结构体的声明

ReactOS系统中MM_REGION结构体的声明 ReactOS系统中MM_REGION结构体的声明 文章目录 ReactOS系统中MM_REGION结构体的声明MM_REGION MM_REGION typedef struct _MM_REGION {ULONG Type;//MEM_COMMIT,MEM_RESERVEULONG Protect;//PAGE_READONLYY,PAGE_READ_WRITEULONG Length;…...

web相关知识学习笔记

一&#xff0c; web安全属于网络信息安全的一个分支&#xff0c;www即全球广域网&#xff0c;也叫万维网&#xff0c;是一个分布式图形信息系统 二&#xff0c; 1.①安全领域&#xff0c;通常将用户端&#xff08;浏览器端&#xff09;称为前端&#xff0c;服务器端称为后端 ②…...

App测试环境部署

一.JDK安装 参考以下AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 二.SDK安装 安装地址&#xff1a;https://www.androiddevtools.cn/ 解压 环境变量配置 变量名&#xff1a;ANDROID_SDK_HOME 参考步骤&#xff1a; A…...

【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model

论文链接&#xff1a;Tabbed Out: Subverting the Android Custom Tab Security Model | IEEE Conference Publication | IEEE Xplore 总览 “Tabbed Out: Subverting the Android Custom Tab Security Model” 由 Philipp Beer 等人撰写&#xff0c;发表于 2024 年 IEEE Symp…...

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP&#xff1a;https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择&#xff1a;输入Molecule Name 然后进行匹配&#xff1a;得到了smiles 再次通过smiles&#xff1a;COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入&#xff1a;http…...

iwebsec靶场 XSS漏洞通关笔记

目录 前言 1.反射性XSS 2.存储型XSS 3.DOM型XSS 第01关 反射型XSS漏洞 1.打开靶场 2.源码分析 3.渗透 第02关 存储型XSS漏洞 1.打开靶场 2.源码分析 4.渗透 方法1&#xff1a; 方法2 方法3 第03关 DOM XSS漏洞 1.打开靶场 2.源码分析 3.渗透分析 3.渗透过程…...

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…...

网站建设彩票网/百度推广登录入口官网网址

Unity中的旋转——以行星环绕为例实现效果一、与之相关的两种旋转方式1.Rotate2.transform.RotateAround二、行星案例的实现Step1&#xff1a;我们先在场景中创建一个球体&#xff0c;并将它放大作为被环绕的恒星&#xff08;我这里自己上了贴图&#xff09;Step2&#xff1a;制…...

wordpress 微信模板怎么用/江西seo推广方案

分布式事务、重复消费、顺序消费 你知道的越多&#xff0c;你不知道的越多 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式&#xff0c;欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛&#xff0c;几乎所有的后端技术…...

做飞机票的图片的网站/打广告去哪个平台免费

shader 试运行在可编程gpu内的小程序 使用shader开始要使用两个着色器 从vertex到fragment vertex 输入的是顶点信息&#xff0c;在中间传递最后在fragment输出color 在新的version中&#xff0c;也可以使用两者中间的 geometry shader. The geometry shader can receive primi…...

wordpress 3.8 侧边栏 仪表盘/网站seo排名优化方法

libevent的evhttp不适合多线程&#xff0c;libevhtp重新设计了libevent的http API&#xff0c;采用了和memcached类似的多线程模型。 worker线程的管道读事件的回调函数为htp__run_in_thread_: #ifndef EVHTP_DISABLE_EVTHR static void htp__run_in_thread_(evthr_t * thr, vo…...

乡镇网站建设方案/百度竞价客服

锁是在处理并发访问数据时&#xff0c;用于定义访问规则的数据结构。MySQL 中的锁根据作用范围分类有全局锁&#xff0c;表级锁和行锁。 全局锁 当你需要对数据库进行整库备份时&#xff0c;为了保证备份时刻的所有数据一致性&#xff0c;需要确保数据库在备份期间不进行数据…...

专业的网页设计和网站建设公司/设计公司网站

触发响应用户行为和GUI事件的操作使用信号和槽构建复杂的应用程序行为&#xff0c;并使用自定义事件覆盖小部件事件处理。如前所述&#xff0c;用户与Qt应用程序的每次交互都会生成一个事件。事件有多种类型&#xff0c;每一种都代表一种不同类型的交互—例如鼠标或键盘事件。发…...