3.Redis持久化

文章目录

      • RDB(Redis DataBase):
          • RDB是什么?
          • RDB能干嘛?
          • RDB自动触发
          • RDB手动触发
          • RDB优点
          • RDB缺点
          • 什么情况会触发RDB快照
      • AOF(Append Only File):
          • AOF是什么?
          • AOF能干嘛?
          • AOF持久化工作流程
          • AOF缓冲区三种写回策略
            • Always(总是):
            • Everysec 默认(每隔一秒):
            • No(从不):
            • 写回策略总结:
          • AOF优点
          • AOF缺点
          • AOF重写机制
            • 是什么?
            • 触发机制:
            • 重写原理
          • 总结
      • RDB+AO混合持久化:
            • 官网建议
            • RDB vs AOF
            • 怎么选?用哪个?
            • 同时开启两种持久化方式
            • 推荐方式
      • 纯缓存模式
            • Save “”
            • AppendOnly No

RDB(Redis DataBase):

RDB是什么?

在指定的时间间隔以内,执行数据集的时间点快照。

实现类似照片记录想过的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来,即使是宕机(假如直接断电),快照文件也不会丢失,数据的可靠性得到了保证。

快照文件称之为RDB文件

RDB能干嘛?

1.在指定时间间隔以内将内存中的数据集快照写入磁盘,也就是Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里

2.Redis的数据都在内存中,保存备份时它执行的是全量快照(我理解就是全局快照),也就是说,把内存中的所有数据都记录到磁盘中

3.Rdb保存的是dump.rdb

RDB自动触发
RDB手动触发

save和BGsave

save:使用save会阻塞当前redis服务器,直到持久化工作完成,并且在执行save命令期间,Redis不能处理其它命令,线上禁止使用

BGsave(默认):不阻塞快照同时还可以相应客户端请求,该触发方式会fork(也就是复制一份)一个子进程由子进程复制持久化过程

RDB优点
  • 适合大规模的数据恢复
  • 对照业务定时备份
  • 读数据完整性和一致性要求不高
  • RDB文件在内存中的加载速度比AOF快得多
RDB缺点
  • 在一定时间间隔做一次备份,所以如果Redis意外down掉,就会丢失从当前到最近一次快照期间的数据,快照之间的数据就会丢失
  • 内存数据的全量同步,如果数据太大会导致I/O严重影响服务器性能
  • RDB依赖主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,大致2倍的膨胀,需要考虑。
什么情况会触发RDB快照
  • 配置文件中默认的快照配置
  • 手动save/bgsave命令
  • 执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
  • 执行shutdown且没有设置开启AOF持久化
  • 主从复制时,主节点自动触发

AOF(Append Only File):

AOF是什么?

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只允许追加文件,但不可以改写文件,Redis启动之初会读取该文件重新构建数据。换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次完成数据的恢复工作。

默认情况,redis没有开启AOF,开启AOF需要设置配置:appendonly yes

AOF能干嘛?

AOF保存的是appendonly.apf文件

AOF持久化工作流程

在这里插入图片描述

1Client作为命令的来源,会有多个源头以及源源不断的请求命令。
2在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
3AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。
4随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的。
5当Redis Server服务器重启的时候会从AOF文件载入数据。
AOF缓冲区三种写回策略
Always(总是):

同步写回,每个命令执行完立刻同步的将日志写回磁盘。

Everysec 默认(每隔一秒):

每秒写回,每一个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入磁盘。

No(从不):

操作系统控制的写回,每个写命令执行完,只是先把日志写道AOF的内存缓冲区,由操作系统决定什么时候将缓冲区内容写回到磁盘。

写回策略总结:
配置项写回时机优点缺点
Always同步写回可靠性高,数据基本不丢失每个写命令都要落盘,性能影响较大
Everysec每秒写回性能适中宕机时丢失1秒数据
No操作系统控制写回性能好宕机时丢失数据较多
AOF优点

在这里插入图片描述

AOF缺点
  • 相同数据集的数据而言,AOF文件要远大于RDB文件,恢复速度慢于RDB。
  • AOF运行效率慢于RDB,每秒同步策略效率较好,不同步效率和RDB相同
AOF重写机制

由于AOF持久化是Redis不断将写命令记录到 AOF 文件中,随着Redis不断的进行,AOF 的文件会越来越大,文件越大,占用服务器内存就越大并且 AOF 恢复时间越长。

为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集或者可以手动使用命令bgrewriteaof来重写。

是什么?

!!!启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

触发机制:

官网默认配置:

  • 根据上次重写后的AOF大小,判断当前AOF大小是不是增长了1倍。
  • 重写时满足的文件大小

只有以上两点同时满足,才会触发AOF重写机制

自动触发:

满足配置文件中的选项后,Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍并且文件大于64MB时。

手动触发:

客户端向服务器发送bgrewriteaof命令

手动使用命令bgrewriteaof来重写

重写原理
  • 在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
  • 与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
  • 当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中
  • 当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中
  • 重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似
总结

在这里插入图片描述

RDB+AO混合持久化:

官网建议

两个可以混合使用

RDB vs AOF

能否共存? 能

如果共存听谁的?听AOF

在这里插入图片描述

怎么选?用哪个?
  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储

  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。

同时开启两种持久化方式
  • 在这种情况下,当Redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?还是建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),留着RDB作为一个万一的手段。
推荐方式

RDB+AOF混合方式

结合了RDB和AOF的优点,既能快速加载又能避免丢失过多数据。

aof-use-rdb-preamble的值为yes yes表示开启 no表示关闭

结论:RDB镜像做全局持久化,AOF做增量持久化

在这里插入图片描述

在这里插入图片描述

纯缓存模式

同时关闭RDB+AOF

Save “”

禁用RDB save加上一个空字符串

禁用RDB持久化模式下,仍然可以使用命令save、bgsave生成RDB文件

AppendOnly No

禁用AOF

禁用AOF持久化模式下,仍然可以使用命令bgrewriteaof生成AOF文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Hadoop】 YARN 运行过程/YARN设计目标

YARN 运行过程剖析YARN设计目标 YARN 运行过程剖析 一个Job在YARN中的处理过程: 客户端向RM提交一个job,进入RM中的调度器队列以供调度RM中的AppManager与NM协商协商好一个容器,以启动一个App Master实例App Master启动之后向RM注册并根据Jo…

刷题第五十一天 84. 柱状图中最大矩形

好难,看解析: # 双指针 class Solution:def largestRectangleArea(self, heights: List[int]) -> int:size len(heights)# 两个DP数列储存的均是下标indexmin_left_index [0] * sizemin_right_index [0] * sizeresult 0# 记录每个柱子的左侧第一…

量化服务器 - 后台挂载运行

服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本,你可以按照以下步骤操作: 启动 tmux: tmux这将会创建一个新…

Ubuntu 常用命令之 ps 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 ps命令是Linux下的一个非常重要的命令,它用于查看系统中的进程状态。ps是Process Status的缩写,可以显示系统中当前运行的进程的状态。 以下是一些常用的参数 a:显示所有进程(包括…

【机器学习】决策树

参考课程视频:https://www.icourse163.org/course/NEU-1462101162?tid1471214452 1 概述 样子: 2 分裂 2.1 分裂原则 信息增益 信息增益比 基尼指数 3 终止 & 剪枝 3.1 终止条件 无需分裂 当前节点内样本同属一类 无法分裂 当前节点内…

【数据结构】四、串

目录 一、定义 二、表示与实现 定长顺序存储 堆分配存储 链式存储 三、BF算法 四、KMP算法 1.求next数组 方法一 方法二(考试方法) 2.KMP算法实现 方法一 方法二 3.nextval 4.时间复杂度 本节最重要的就是KMP算法,其他要求不高…

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图,ApiModel加在实体类上方,用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方,用于对属性进行描述。swagger2网页上的效果如下图&am…

c++内存池项目

文章目录 一、内存池介绍二、ThreadCache实现三、CentralCache实现四、PageCache实现五、回收内存六、大于256KB的内存申请与释放七、将new和delete换为定长内存池八、多线程环境下对比malloc进行基准测试九、使用基数树进行性能优化 一、内存池介绍 二、ThreadCache实现 下面…

Wordpress插件WP-Statistics无法识别来访IP国家和城市处理方法

Wordpress插件WP-Statistics,可以识别网站访问者的IP物理地址,统计出城市、国家,但最近发现都显示unknown/未知: 更新GeoIP数据库到最新还是不行: 偶然找到了之前能用的数据库,恢复回去,竟然大…

基于SpringBoot的桃花峪滑雪场租赁系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

【AI提示词人物篇】创新艺术未来,让科技改变想象空间

AI 绘画学习难度和练习技巧 学习绘画的技巧 学习能难度: 外貌特征:AI需要学习识别和理解各种外貌特征,如发型、肤色、眼睛颜色等。这可能需要大量的训练数据和复杂的模型架构。 镜头提示:AI需要学习理解不同镜头提示的含义&…

中心性算法归纳

中心性算法不仅是在我所学习的计算机网络当中起很重要的作用,在交通网络、社交网络、信息网络、神经网络当中也有很多的应用例子。今天我在这里总结一下场景的几种中心性算法。 参考文献 Python NetworkX库 偏心中心性(Eccentricity Centrality&#x…

Kubernetes 的用法和解析(K8S 日志方案) -- 8

一、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大多数容器引擎同样被设计成支持某种日志机制。 对…

安装vcpkg管理opencv的安装+MFC缺失的解决

第一步,出现#include没有办法找到opencv头文件的问题,无法解决 在VC的提示下,安装了vcpkg,然后用vcpkg命令来帮助安装opencv,过程十分顺利。 1. cmd 到命令行窗口; 2. 建立src文件夹,并进入…

KMP入门级别算法详解--终于解决了(next数组详解)

对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(mn)。 设主串为ptr"ababaaababaa";&#…

MFC窗体背景颜色的设置、控件白色背景问题、控件文本显示重叠问题、被父窗体背景覆盖的问题

文章目录 设置mfc窗体背景颜色窗体设置背景颜色后解决控件白色背景解决重复修改控件文本后重叠的问题自绘控件被父窗体背景覆盖的问题 设置mfc窗体背景颜色 设置窗体的背景颜色非常简单,只需要在窗体的OnEraseBkgnd里面填充窗体背景就可以了,甚至直接画…

【SpringCloud】-GateWay源码解析

GateWay系列 【SpringCloud】-GateWay网关 一、背景介绍 当一个请求来到 Spring Cloud Gateway 之后,会经过一系列的处理流程,其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧 二、正文 …

30. MVC设计模式

JavaEE 开发流程 ↓MVC的概念 MVC是Model-View-Controller的简称,即模型-视图-控制器。 MVC是一种设计模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。 模型(model) 模型是应用程序的主体部分…

JavaEE进阶学习:Spring MVC 程序开发

1.什么是 Spring MVC Spring Web MVC 是基于Servlet API 构建的原始 Web 框架,从一开始就包含在Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。 从上述定义我们可以得出两个关键信…

每日一题——轮转数组

1. 题目描述 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1步:[7,1,2,3,4,5,6] 向右…