Redis数据持久化(持久化过程中写操作如何处理)

news2025/7/22 21:08:45

        上一节简单分析了Redis数据持久化方式,点击这里查看。但是要考虑的一个问题就是,在Redis持久化的时候,有新的写入指令时,Redis是如何操作的。

1.RDB方式

1.1.同步方式

        即save操作,在Redis执行save操作时,主进程阻塞,无法处理客户端指令,所以这种情况不用考虑在RDB持久化过程中的客户端写入指令如何处理。

1.2.异步方式

        即bgsave操作,在Redis执行bgsave操作时,主进程会fork出一个子进程,子进程与主进程指向同一个内存空间。

        当子进程在持久化过程中,如果主进行执行了写指令,那么主进程会将改数据,复制到一块新的内存中,生成一个数据副本,在副本上对数据进行修改。所以子进行进行持久化的内存中还是保存的原始数据。这也是RDB备份称为“快照”的原因:子进程在创建出来的一瞬间,要持久化的数据就已经固定了。具体执行流程示意图如下:

 

        所以在RDB持久化过程中,写操作时,主进程会开辟新的内存空间,不影响原数据,主进程写如的新数据对子进程是不可见的,直至子进程持久化结束,主进程才会将新数据与原数据进行合并,而新的数据也会在下次持久化时写入RDB文件。

2.AOF方式

        对于AOF方式,Redis服务会定期将执行的写入指令以追加的方式写入AOF文件。       

        ⭐在说明AOF写文件之前,先要说明一个操作系统的文件写入与同步的机制:为了提高文件的写入效率,在现代的操作系统中,当用户调用 write 函数,将一些数据写入到文件的时候,操作系统通常会将写入数据暂时保存在一个内存缓冲区里面,等到缓冲区的空间被填满、或者超过了指定的时限之后,才真正的将缓冲区中的数据写入到磁盘里。就像打开了一个文件,写入文件就像是调用了write函数,但是按下Ctrl+S保存时,才是真正将文件内容保存到磁盘,保存时才算是执行了同步操作,所以同步操作时才能真正保存AOF文件。       

        在Redis执行AOF持久化的时候,主进程接收到客户端写指令后,会将指令放入aof_buf 缓存区,当满足appendfsync配置的持久化条件后,进行持久化操作,将aof_buf缓存区的数据写入AOF文件。

        在Redis服务器每次结束一个事件循环之前,它都会调用 flushAppendOnlyFile 函数。下面看一下《Redis设计与实现》中,关于AOF持久化appendfsync选项对应flushAppendOnlyFile 函数说明如下:

appendfsync选项flushAppendOnlyFile函数行为
always将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件
everysec(默认)将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,如果上次同步 AOF 文件的时间距离现在超过一秒钟,那么再次对 AOF 文件进行同步,并且这个操作是由一个线程专门负责执行的
no将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,但并不对 AOF 文件进行同步,何时同步由操作系统来决定

         下面对appendfsync的三个选项分别说明:

always:

        服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,并且同步 AOF 文件,所以 always 的效率是 appendfsync 选项三个值当中最慢的一个,但从安全性来说,always 也是最安全的,因为即使出现故障停机,AOF 持久化也只会丢失一个事件循环中所产生的命令数据。

everysec:

        服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,并且每隔一秒就要在子线程中对 AOF 文件进行一次同步。从效率上来讲,everysec 模式足够快,并且就算出现故障停机,数据库也只丢失一秒钟的命令数据。

no:

        服务器在每个事件循环都要将 aof_buf 缓冲区中的所有内容写入到 AOF 文件,至于何时对 AOF 文件进行同步,则由操作系统控制。因为处于 no 模式下的 flushAppendOnlyFile 调用无须执行同步操作,所以该模式下的 AOF 文件写入速度总是最快的,不过因为这种模式会在系统缓存中积累一段时间的写入数据,所以该模式的单次同步时长通常是三种模式中时间最长的。从平摊操作的角度来看,no 模式和 everysec 模式的效率类似,当出现故障停机时,使用 no 模式的服务器将丢失上次同步 AOF 文件之后的所有写命令数据。

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

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

相关文章

systemVerilog的变量类型转换

1 Type Casting 1.1 Verilog使用赋值语句进行变量类型转换 阻塞赋值&#xff1a; 非阻塞赋值&#xff1a; < 1.2 systemVerilog增加了变量类型转换符 变量类型转换符可以在任何时刻对表达式进行类型转换而不像Verilog一样只能发生在赋值语句中 logicint a&#xff0c;y&…

开放式运动耳机怎么样,几款合适的骨传导耳机推荐

骨传导作为新时代的产物&#xff0c; 近些年在耳机市场也是兴起了一波热潮&#xff0c;无论是在日常出勤时佩戴&#xff0c;还是在运动的时候佩戴&#xff0c;骨传导耳机相对于传统耳机来说无疑是越来越符合。其骨传导最大的特点无非就是特殊的传声方式以及无需入耳的佩戴&…

每日一个设计模式之【外观模式】

文章目录每日一个设计模式之【外观模式】☁️前言&#x1f389;&#x1f389;&#x1f389;&#x1f33b;外观模式概述&#x1f331;外观模式的实现&#x1f332;总结每日一个设计模式之【外观模式】 ☁️前言&#x1f389;&#x1f389;&#x1f389; 大家好✋&#xff0c;我…

【c++】四种类型转换的用法

这里写目录标题static_cast 无条件转换&#xff0c;静态类型转换const_cast 去掉类型的const或volatile属性dynamic_cast 有条件转换&#xff0c;动态类型转换&#xff0c;运行时检查类型安全&#xff08;转换失败返回NULL&#xff09;reinterpret_cast 仅重新解释类型&#xf…

离散数学(十二):关系的幂运算与关系的性质

1 关系的幂运算 1&#xff09;幂运算的定义 2&#xff09;幂运算的求法 幂运算有两种求法&#xff0c;基于矩阵的方法和基于关系图的方法。我们之前学过关系的表示方法有三种&#xff1a;集合、矩阵、关系图。那么同样&#xff0c;这些方式也可以运用于关系的计算中。 需…

leaflet教程029: 加载KML文件(代码示例)

第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载kml文件,将图形显示在地图上。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式安装leaflet-plugins本示例引用的kml文件代码示例源代码(共79行)专栏目标…

【容器网络】跨主通信网络实现方法之host-gw实现原理

以上是VXLAN在跨主通信的实现原理&#xff0c;本文讲述的是host-gw的实现原理。 目录 Host-gw 基本原理 flannel的host-gw 数据包传输过程 calico的host-gw calico架构 BGP Peer Node-to-NodeMesh Route Reflector IPIP Host-gw 在容器生态中,提供 Host-gw解决方案…

Seata AT模式TransactionHook会被莫名删除?

前言 兄弟们&#xff0c;刚刚又给seata社区修了一个BUG&#xff0c;有用户提了issue反应TransactionHook在某些情况下不会被调用&#xff1a; 该用户在issue中已经指出了相关问题所在&#xff1a; 下面我们来看一下到底是什么原因导致了上述BUG的产生。 问题定位 根据用户的…

最新JMeter面试题,紧扣面试实际要求,看完拿下20K

JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是测试人员必须要掌握的工具之一。 下面小编给大家总结了22年最新30道关于JMeter的面试题&#xff0c;…

基于51单片机的温度报警系统

功能&#xff1a; 设计一个温度报警系统&#xff0c;可以设定温度上、下限的值&#xff0c;到达设定值时&#xff0c;蜂鸣器响&#xff1b;按键设定有设置、确定、取消、减少与增加功能&#xff0c;LCD1602实时显示相关温度信息 设定界面&#xff1a; 温度超过设定值&#xf…

美国能源部国家实验室将量子计算用于关键能源研究

​ &#xff08;图片来源&#xff1a;网络&#xff09; 量子计算是一种新兴的、强大而有前途的且能快速解决复杂问题的新力量&#xff0c;美国能源部国家实验室NETL的专家正准备将量子计算投入到关键能源的研究课题上&#xff0c;以实现环境可持续和能源应用的无限未来。 量子…

【MySQL | 运维篇】05、MySQL 分库分表之 使用 MyCat 分片

目录 一、垂直拆分 1.1 场景 1.2 准备 1.3 配置 1). schema.xml 2). server.xml 1.4 测试 1). 上传测试SQL脚本到服务器的 /root/sql 目录 2). 执行指令导入测试数据 3). 查询用户的收件人及收件人地址信息(包含省、市、区)。 4). 查询每一笔订单及订单的收件地址信息…

html页面广告5秒之后跳过

首页 - <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width; in…

【51】分布式计算:如果所有人的大脑都联网会怎样?

【计算机组成原理】学习笔记——总目录 【51】分布式计算&#xff1a;如果所有人的大脑都联网会怎样&#xff1f;引言一、从硬件升级到水平扩展二、理解高可用性和单点故障三、总结【个人总结的重点】引言 现在我们每天在用的个人 PC、智能手机&#xff0c;乃至云上的服务器&a…

Nginx反向代理配置

关键字&#xff1a; 反向代理&#xff0c;负载均衡 第一步&#xff1a;官网下载windwos版本nginx 下载地址链接:nginx: download 如下图所示 第二步&#xff1a;解压启动nginx 备注&#xff1a;启动前先查看进程是否占用 80端口 netstat ano | findstr 80tasklist |findstr “…

linux下Nerdtree安装方法

目录 1.下载Nerdtree 2. linux下安装 3. 成功享受吧 1.下载Nerdtree 百度网盘下载&#xff0c;地址为链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;07e3 --来自百度网盘超级会员V4的分享 github方式下载&#xff0c;地址为 https://github.com/scrooloose/ner…

【附源码】Python计算机毕业设计蔬果批发网络平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

HECTF2022 学习笔记

HECTF2022 MISC笔记 目录HECTF2022 MISC笔记小鲨鱼来喽~舞者的秘密你把我的flag藏哪去了。。小鲨鱼来喽~ 查看最后面的http数据包&#xff0c;发现flag 舞者的秘密 先爆破出压缩包密码&#xff0c;用010打开&#xff0c;发现文件开头是gif的格式 将图片格式改为gif&#xf…

Mysql之常用函数、聚合函数合并(unionunion all)【第四篇】

大纲&#xff1a; 1、函数的简介 MySQL函数是 MySQL 数据库提供的内部函数&#xff0c;这些内部函数可以帮助用户更加方便地处理表中的数据。函数就像预定的公式一样存放在数据库里&#xff0c;每个用户都可以调用已经存在的函数来完成某些功能。 简单来说&#xff0c;函数就是…

Sublime Text v4.0(4143)破解方法

[TOC](Sublime Text v4.0(4143)破解方法) 版本Sublime Text v4.0(4143) 所需软件 Sublime Text v4.0(4143)下载地址&#xff1a;https://www.sublimetext.com/download_thanks?targetwin-x64 010 Editor下载地址(其他十六进制编辑器也可以) https://download.sweetscape.co…