Redis的持久化(新)

        Redis中数据都保存在内存,但是内存中的数据变换很快,也很容易丢失,比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)AOF(Append Only File)

1.RDB

        RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁盘中,也是默认的持久化的方式,利用数据快照,使用的是写时复制技术,将数据以二进制的格式保存在磁盘。

1.1触发快照的时机(save)

1.1.1手动触发

手动触发分别对应save和bgsave命令:

  • save命令:阻塞当前Redis服务,去做持久化操作,直到RDB持久化过程完成为止,不推荐使用。

  • bgsave命令:redis进程执行fork操作创建子进程,子进程负责RDB持久化,完成后子进程自动结束,而且原进程的阻塞只发生在fork阶段。

1.1.2自动触发

        利用save进行相关配置,我们进入到redis.conf文件中,其中Save m n就表示若在m秒里面至少进行了n次数据更改时会自动执行bgsave

        我们将需要持久化的数据写入磁盘中保存,磁盘中的文件名为dump.rdb,和bin在同一个目录,redis启动时,就是读取dump.rdb文件将数据加载进内存中的。文件的名字可在redis.conf文件里面进行修改。

 注意

  1. 如果只开启了rdb,通过shutdown save命令断开Redis的连接时,也会自动执行bgsave。

  2. 在调试级别(debug)中重新启动Redis时,不会清空内存中的数据,这意味着原有的RDB文件仍然有效,即使未执行保存操作。

  3. 当Redis执行全量复制(主从复制)时,如果没有执行save或bgsave命令并且没有添加配置策略,主节点会自动生成RDB文件,并传输给从节点进行数据同步。

1.2RDB持久化和数据恢复的完整流程(bgsave)

        当需要进行持久化时,Redis会单独创建一个子进程来完成持久化操作,这个子进程中所有的数据都和原进程保持一致,而且是一个全新的进程,也会占用内存,这个操作也称为Fork

        此时原进程不进行任何操作,由其子进程完成数据的持久化,子进程会先将快照数据写入到一个临时的文件,等到数据写完了之后,再用这个临时的文件直接替换磁盘上的dump.rdb文件即可。

        但是缺点是如果子进程正在将数据写入临时文件,此时突然宕机,无法将临时文件替换dump.rdb,下次启动后,恢复后的内存数据较与宕机之前相比就会丢失一部分。

        发现整个过程中,原进程是不进行任何IO操作的,这就确保了极高的性能。

1.3RDB方式的优劣分析

1.3.1优点
  • 恢复数据速度快。

  • 节省磁盘空间(二进制格式存储)。

1.3.2缺点
  • fork的时候,会占用内存空间。

  • 可能会丢失数据,不适用于数据一致性高的场景。

2.AOF

日志的形式来记录每个更改的操作,不会记录读的操作,只允许追加而不允许改写。在redis重启或启动之初会读取该文件然后重新构建Redis数据库的数据,这样也不用害怕内存数据的丢失了。

AOF方式Redis默认是不开启的,如果要开启则需要在配置文件中修改,若AOF和RDB同时开启,系统默认选择用AOF来恢复数据,AOF在磁盘中保存的日志文件是"appendonly.aof",文件的路径和RDB一致。

2.1AOF同步频率策略

  • appendsync always :表示每次的修改都会立刻记入磁盘日志文件,性能较差但是能保证数据的一致性。

  • appendsync everysec (默认) :每一秒执行一次数据同步,但可能会在临界点丢失数据。

  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统。

2.2Rewrite压缩

因为AOF采用的是追加写入的方式,为了避免磁盘AOF文件越来越大,新增了重写机制,当文件默认达到128MB时,Redis就会自动进行AOF文件的内容压缩,保留能达到最终结果的最小指令集。

2.2.1重写的整体流程梳理(自动的)
  1. 主进程fork一个子进程去执行重写的操作,主进程正常运行不会阻塞。

  2. 主进程执行的写操作要同时写入AOF缓冲区和AOF_rewrite缓冲区,此时子进程遍历内存数据将自己压缩的指令集先存储到临时文件(新AOF文件),之后向主进程发送信号。

    注意:这里AOF缓冲区是否要根据同步策略将数据同步到磁盘AOF文件中?

    可以进行设置。如果同步,那么数据安全一致性,但是性能会比较低。如果不同步,若此时宕机,会造成数据丢失,但是性能比较高。

  3. 主进程把AOF_rewrite缓冲区中的数据写入到临时文件中。

  4. 使用临时文件(新AOF文件)覆盖旧的AOF文件,完成AOF重写。

2.3AOF持久化和数据恢复的完整流程

  1. 写操作命令先会被追加写入到AOF缓冲区内。

  2. AOF缓冲区根据同步频率策略将缓冲区数据同步到磁盘AOF文件中。

  3. 看磁盘AOF文件大小是否超过阈值,判断要不要rewrite重写。

  4. 如果Redis宕机,重启服务时,会加载AOF文件来进行数据恢复。

2.4AOF文件出现损坏

        如遇到AOF文件损坏,通过.........../bin/redis-check-aof--fix appendonly.aof进行恢复。恢复后重启Redis服务即可。

2.5AOF方式的优劣分析

2.4.1优点
  • 备份机制更加的稳健,丢失数据概率更低。

  • 可读的日志文件。

2.4.2缺点
  • 相比RDB占用更多的磁盘空间。

  • 恢复数据相比RDB更慢。

  • 如果每次写操作都同步,对性能要求较高。

  • AOF文件可能出现损坏,需要手动修复。

                

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

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

相关文章

HTML玩转超链接a标签

大家应该都知道,a标签主要是转跳链接,接下来,让我为大家介绍一下a标签的使用! 主要的作用:从当前页面进行跳转 标签名标签语义常用属性单/双标签a超链接href:要跳转的具体位置 target:跳转时如…

第一百七十七回 如何创建垂直方向的Switch

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建渐变色边角"相关的内容,本章回中将介绍" 如何创建垂直方向的Switch".闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面…

zookeeper单机版的搭建

一 zookeeper的搭建 1.1 上传zkjar包 1.2 搭建配置 1.解压压缩包 [rootlocalhost export]# tar -zxvf zookeeper-3.7.0-bin.tar.gz 2.创建data文件夹 [rootlocalhost export]# cd apache-zookeeper-3.7.0-bin/ [rootlocalhost apache-zookeeper-3.7.0-bin]# ls bin conf…

利用人工智能打破应试教育惯性促进学生思维活化与创新能力培养的研究

全文均为人工智能独立研究完成 应试教育导致学生迷信标准答案惯性导致思维僵化-移动机器人-CSDN博客 用AI魔法打败AI魔法-CSDN博客 课题名称建议:“利用人工智能打破应试教育惯性,促进学生思维活化与创新能力培养研究”。 这个课题名称明确指出了研究的…

高斯消元(完全主元法 and 部分主元法) C++代码

部分主元法高斯消元 /* 算法步骤&#xff1a;1.枚举每一列&#xff0c;找到绝对值最大的一行2.将该行和第一行交换3.将该行行首置为一4.将下面所有行第 i 列置为零 */#include <iostream> #include <cmath>using namespace std; const int N 109; const double e…

Linux内核的内存管理

Linux内核源码内存管理主要包括以下几个部分&#xff1a; 1. 物理内存管理&#xff1a;这部分主要负责将物理内存划分为不同的页表项&#xff0c;以便操作系统能够快速地访问和操作内存。 2. 虚拟内存管理&#xff1a;这部分主要负责将用户空间的地址映射到物理内存中&#x…

linux之进程地址空间

文章目录 1.进程地址空间回顾1.1进程地址空间划分1.2验证进程地址空间划分1.简单划分2.完整划分 2.初探进程地址空间2.1初看现象2.2Makefile的简便写法 3.进程地址空间详解3.1地址空间是什么?3.2地址空间的设计/由来3.3空间区域划分3.4如何理解地址空间?3.5解释3.2的&#x1…

警惕.locked勒索病毒,您需要知道的预防和恢复方法。

尊敬的读者&#xff1a; 随着网络技术的进步&#xff0c;勒索病毒已经成为一种极具威胁性的网络犯罪工具之一。其中&#xff0c;.locked勒索病毒是一种采用高级加密算法的恶意软件&#xff0c;目的是加密用户的文件&#xff0c;并勒索赎金以提供解密密钥。本文将介绍如何应对被…

解决No Feign Client for loadBalancing defined,修改Maven依赖

Spring微服务报错&#xff1a; java.lang.IllegalStateException:FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netf…

你不知道的库:库的种类,作用和加载方式

你不知道的库&#xff1a;库的种类&#xff0c;作用和加载方式 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客…

组件化——组件的实现原理

渲染器主要负责将虚拟 DOM 渲染为真实 DOM&#xff0c;我们只需要使用虚拟 DOM 来描述最终呈现的内容即可。但当我们编写比较复杂的页面时&#xff0c;用来描述页面结构的虚拟 DOM 的代码量会变得越来越多&#xff0c;或者说页面模板会变得越来越大。这时&#xff0c;我们就需要…

iperf3 网络测试

iperf3 测试网络的上下行带宽 下载地址 https://iperf.fr/iperf-download.php 开启服务器 开启客户端 常用命令 -c 代表客户端-s 代表服务端-u 代表 udp-r 代表数据方向是否反向 https://baijiahao.baidu.com/s?id1731514357681464971&wfrspider&forpc

C++学习 --queue

目录 1&#xff0c; 什么是queue 2&#xff0c; 创建queue 2-1&#xff0c; 标准数据类型 2-2&#xff0c; 自定义数据类型 2-3&#xff0c; 其他创建方式 3&#xff0c; 操作stack 3-1&#xff0c; 赋值 3-2&#xff0c; 插入元素(push) 3-3&#xff0c; 查询元素 3…

Python简直是万能的,这5大主要用途你一定要知道!

从2015开始国内就开始慢慢接触Python了&#xff0c;从16年开始Python就已经在国内的热度更高了&#xff0c;目前也可以算的上"全民Python"了。 众所周知小学生的教材里面已经有Python了&#xff0c;国家二级计算机证也需要学习Python了&#xff01; 因为Python简单…

编程语言发展史:布尔代数和机器语言

布尔代数是一种数学理论&#xff0c;用于描述和分析逻辑和布尔值的关系。它是由英国数学家George Boole在19世纪中期发明的&#xff0c;被认为是现代计算机科学的基础之一。布尔代数的发明使得逻辑运算可以被表示为代数运算&#xff0c;从而为计算机科学的发展奠定了基础。 在…

PTA 7-4 数列求和-加强版

7-4 数列求和-加强版 分数 20 全屏浏览题目 作者 DS课程组 单位 浙江大学 给定某数字A&#xff08;1≤A≤9&#xff09;以及非负整数N&#xff08;0≤N≤100000&#xff09;&#xff0c;求数列之和SAAAAAA⋯AA⋯A&#xff08;N个A&#xff09;。例如A1, N3时&#xff0c;S1…

Unity、UE和Godot的优劣对比

先占位。。。。。。 首先说Unity和UE这两家公司&#xff0c;是行业的两座灯塔&#xff0c;对整个游戏引擎的这个行业的发展具有这种指导性的这种作作用。这两个引擎我从2016年开始就一直在用&#xff0c;结合一下业内的共识&#xff0c;一般来说认为呢&#xff0c;Unity更擅长移…

2023全球边缘计算大会深圳站-核心PPT资料下载

一、峰会简介 边缘计算&#xff0c;是指在靠近物或数据源头的一侧&#xff0c;采用网络、计算、存储、应用核心能力为一体的开放平台&#xff0c;就近提供最近端服务。其应用程序在边缘侧发起&#xff0c;产生更快的网络服务响应&#xff0c;满足行业在实时业务、应用智能、安…

LeetCode算法题解(动态规划,背包问题)|LeetCode416. 分割等和子集

LeetCode416. 分割等和子集 题目链接&#xff1a;416. 分割等和子集 题目描述&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,…

Linux中的进程程序替换

Linux中的进程程序替换 1. 替换原理2. 替换函数3. 函数解释4. 命名理解程序替换的意义 1. 替换原理 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的…