【Java八股学习】Redis持久化 思维导图

news2025/3/12 0:45:51

在这里插入图片描述

说明

文章内容通过学习小林Coding内的优质文章后整理而来,整理成思维导图的方式是为了帮助自己理解、记忆和复习。如若侵权请联系删除,再次对小林Coding内的优质文章表示感谢。参考文章如下:

  • AOF 持久化是怎么实现的?
  • RDB 快照是怎么实现的?
  • Redis 大 Key 对持久化有什么影响?

思维导图会不断修改完善,下方的文字内容不一定会跟着修改,请大家以思维导图的内容为准。

文章目录

  • 说明
  • Redis持久化
    • AOF日志
      • 是什么
      • 怎么开启
      • 执行流程
        • 优点
        • 风险
      • 三种写回策略
        • Always
        • Everysec
        • No
      • 重写机制
        • 重写是什么
        • 为什么要重写
        • 重写过程
          • 为什么用新AOF文件
          • 为什么用子进程
          • 父子进程怎么共享内存数据
          • 写时复制是啥
          • 什么时候会阻塞主进程
          • 主进程修改数据,父子进程数据不一致怎么解决
      • 优缺点
    • RDB快照
      • 是什么
      • 相较于AOF的优缺点
      • 怎么用
      • 快照执行过程
    • 混合持久化
      • 是什么
      • 怎么开启
      • 执行过程
      • 优点

Redis持久化

AOF日志

是什么

  • Redis 每执行一条写操作命令(读操作没必要记录),就把该命令以追加的方式写入到一个AOF文件里
  • 重启 Redis 的时候,先去读取这个文件里的命令并执行,数据就恢复了

怎么开启

  • 修改redis.conf
# 是否需要持久化存储
appendonly yes
# 产生的AOF文件名称
appendfilename "appendonly.aof"
# 使用什么策略
appendfsync everysec

执行流程

Redis先执行写操作命令,再记录到AOF日志(在主进程完成)

优点
  • 避免额外检查开销:如果先写到AOF,需要检查命令是否正确

  • 不阻塞当前写操作命令执行

风险
  • 日志没有写到磁盘,服务器宕机,数据会丢失
  • 可能阻塞下一个命令

三种写回策略

Always

每次写操作都将日志写回硬盘

  • 优点:最大程度保证数据不丢失
  • 缺点:影响主进程性能
Everysec

每次写操作先将命令写入AOF文件内核缓冲区,每隔一秒将缓冲区内存写回硬盘

  • Always和No的折中方案,平衡性能和数据丢失量
No

Redis不控制,交由操作系统控制写回时机。先将命令写入AOF文件内核缓冲区,操作系统决定何时将日志写回硬盘

  • 优点:性能较好
  • 缺点:操作系统将日志写回硬盘时机不可预知,服务器宕机丢失的数据可能比较多

重写机制

重写是什么
  • 对于一个键,只保留最新的命令,减少AOF文件的数据量
  • 如先执行set num 1,再执行set num 2,最后只需要保留set num 2,历史命令没用
为什么要重写

随着项目运行,AOF文件越来越大,重启Redis后的恢复速度会下降

重写过程

创建一个子进程来将最新命令先存储到一个新AOF文件,再覆盖旧AOF文件

为什么用新AOF文件
  • 避免AOF重写失败造成原AOF文件数据被污染
  • 使用新AOF文件,重写失败,直接删除新文件即可
为什么用子进程
  • 重写较慢,避免阻塞主进程

  • 为什么不用线程

    • 多线程会共享内存,修改共享内存数据时,需要加锁保证数据安全,性能较差
    • 父子进程以只读方式共享内存数据,如果父子一方要修改共享内存数据,会发生写时复制产生独立数据副本,无需加锁,性能较好
父子进程怎么共享内存数据

创建子进程时,操作系统会将主进程的页表复制给子进程,页表的虚拟地址会指向真实物理地址。父子进程都可以通过页表找到物理内存

写时复制是啥
  • 当父进程发生写操作时,操作系统会将相应键的物理内存复制一份出来(会阻塞主进程),这样修改的时候不会影响原有物理内存

  • 为什么不在创建子进程的时候将所有物理内存复制一份给子进程,而是复制页表

    • 复制物理内存的话,时间长,主进程会长时间堵塞
    • 页表内存较小,复制快
什么时候会阻塞主进程
  • 复制页表
  • 写时复制,bigkey影响较大
主进程修改数据,父子进程数据不一致怎么解决
  • 除了AOF缓冲区,Redis还设置了AOF重写缓冲区,重写期间,会将命令追加到AOF重写缓冲区
  • 重写完成后,将AOF重写缓冲区的命令追加到AOF文件

优缺点

  • 优点:丢失数据可控

  • 缺点:AOF日志文件大时,数据恢复慢

RDB快照

是什么

  • RDB 快照就是记录某一瞬间的内存二进制数据,AOF 文件记录的是命令
  • 每次执行快照,将所有内存数据记录到硬盘,效率较低,因此使用子进程来执行

相较于AOF的优缺点

  • 优:直接将RDB文件读入内存即可,数据恢复效率高,无需执行命令

  • 缺:快照频率不好把控。频率高,频繁创建子进程和磁盘IO,性能差;频率低,服务器宕机,丢失数据比AOF多

怎么用

修改redis.conf

save 900 1
save 300 10
save 60 10000
  • 满足三个条件的任意一个就会执行快照
  • save 900 1表示900秒内,执行至少1次数据修改

快照执行过程

  • 执行bgsave时,创建一个子进程来生成RDB文件,父子共享内存数据时,原理同AOF
  • 主进程修改共享内存数据的话,触发写时复制,生成RDB还是用旧的数据,因此此次更新的数据需要下次bgsave来生成快照

混合持久化

是什么

AOF、RDB合体。使用混合持久化,AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据

怎么开启

修改redis.conf

aof-use-rdb-preamble yes

执行过程

在 AOF 重写日志时,fork 出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件,然后主线程处理的操作命令会被记录在重写缓冲区里,重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件,写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件

优点

  • 效率高:因为前半部分是RDB内容

  • 丢失数据少:操作命令会被记录到AOF日志

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

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

相关文章

【.NET全栈】ZedGraph图表库的介绍和应用

文章目录 一、ZedGraph介绍ZedGraph的特点ZedGraph的缺点使用注意事项 二、ZedGraph官网三、ZedGraph的应用四、ZedGraph的高端应用五、、总结 一、ZedGraph介绍 ZedGraph 是一个用于绘制图表和图形的开源.NET图表库。它提供了丰富的功能和灵活性,可以用于创建各种…

计算机网络:数据链路层 - 可靠传输协议

计算机网络:数据链路层 - 可靠传输协议 可靠传输概念停止-等待协议 SW回退N帧协议 GBN选择重传协议 SR 可靠传输概念 如下所示,帧在传输过程中受到干扰,产生了误码。接收方的数据链路层,通过真伪中的真检验序列 FCS 字段的值&…

在ArcGIS Pro中优雅的制作荧光图

最近在网上看到了荧光图,觉得挺帅气,去网上查询了怎么制作荧光图,发现大部分都是QGIS的教程,作为ArcGIS的死忠用户,决定在ArcGIS Pro中实现,其实挺简单的。 1、软件:ArcGIS Pro3.0 2、点数据&a…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(五)- 向量加载和存储

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

8.list容器的使用

文章目录 list容器1.构造函数代码工程运行结果 2.赋值和交换代码工程运行结果 3.大小操作代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.反转和排序代码工程运行结果 list容器 1.构造函数 /*1.默认构造-无参构造*/ /*2.通过区间的方式进行构造…

如何从 Android 和 iPhone 中的 SIM 卡恢复已删除的联系人 [新]

在手机上,我们经常添加联系人,而很少关心联系人是存储在SIM卡中还是手机中。当我们错误删除SIM卡联系人,或者不当取出插入的SIM卡插入新手机时,那些因业务需要而添加的联系人就会消失。这可能会令人沮丧和困惑。因此,您…

基于springboot实现墙绘产品展示交易平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现墙绘产品展示交易平台管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本墙绘产品展示交易平台就是在这样的大环境下诞生&…

macbook向日葵忘记密码

macbook向日葵忘记密码 问题:1、切换到下面的目录:2、找到配置文件3、删除该配置文件4、然后就正常了 问题: 向日葵忘记密码的话,即使是卸载了重装也需要输入密码,界面一直如下: 1、切换到下面的目录&am…

浅谈TCP(2):流量控制与拥塞控制

上文浅谈TCP(1):状态机与重传机制介绍了TCP的状态机与重传机制。本文介绍流量控制(Flow Control,简称流控)与拥塞控制(Congestion Control)。TCP依此保障网络的QOS(Quali…

sparksql执行流程

1. SparkSQL的自动优化 我们前面的文章已经说过spark RDD定义好后,执行经过DAG sechduler划分号内存管道、逻辑任务,然后经由task scheduler来分配到具体worker来管理运行,RDD的运行会完全按照开发者的代码执行 如果开发者水平有限&#xff…

Transformers in Vision:A Survey 阅读笔记

ACM上的一篇综述,讨论Transformer在CV上的应用。 摘要: Among their salient benefits,Transformers enable modeling long dependencies between inputsequence elements and support parallel processing of sequence as compared to recurrent networ…

MFC通用静态库制作与使用

开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…

C语言-----数据在内存中的存储(1)

1.整数在内存中的存储 我们之前就了解过整数的二进制写法分别有3种,分别为原码,反码,补码。整型在内存中存储的是补码。 原码,反码,补码都有自己的符号位和数值位,符号位为1时,则表示负数&…

AI绘画:使用Stable Diffusion ComfyUI进行换脸:IPAdapter FaceID全面教程

在数字艺术和媒体编辑领域,换脸技术已经成为一种流行且强大的工具。它允许创作者将一个人物的面部特征无缝地转移到另一个人物上,创造出令人信服的视觉作品。Stable Diffusion ComfyUI提供了一个高效的平台,让用户能够轻松地实现换脸。本文将…

python和pip中常见命令和方法

玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,下面是整理和总结pip中的常见命令和方法。 pip更新版本 python -m pip inst…

图像分割-综述篇

文章目录 图像分割算法类型全卷积FCNSegNetUNetDeeplab v1PSPNetDeeplab v2Deeplab v3Deeplab v3 基于候选区Mask RCNNMS RNN 基于GAN基于RNNReSegViTSwin TransformerSAM(Segment Anything Model) 图像分割算法类型 正如我在目标检测系列中提到的,图像分割&#x…

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1:运行查看有什么可以快捷使用的,更新了些什么,可不可以直接复制粘贴 主要内容:在web端中模拟手机类型的点击长按操作,不能直接运行在安卓与io…

代码随想录Day27:回溯算法Part3

Leetcode 39. 组合总和 讲解前: 这道题其实在掌握了之前的组合问题之后再看并不是那么难,其关键就在于我们这道题中没有一个特定需要的组合大小,并且列表中的元素是可以重复使用的,那么比如说给的例子中的 输入: candidates [2…

使用Python获取红某书笔记详情并批量无水印下载

根据红某手最新版 请求接口必须要携带x-s x-s-c x-t,而调用官方接口又必须携带cookie,缺一不可,获取笔记详情可以通过爬取网页的形式获取,虽然也是无水印,但是一些详情信息只能获取大概,并不是详细的数值,因此既不想自己破解x-s x…

【chrome扩展】简 Tab (SimpTab)‘每日一句名言’样式

背景:最初参考“每日诗词”发现总是那几句,可以更换API接口完成“每日一句名言” 声明:本人不会ajax及ccs样式,非专业人士,借助CHATGPT代码生成完成。请友善交流。 每一句名言API: "https://api.xygeng.cn/open…