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

Redis持久化机制(RDBAOF详解)

目录

  • 一、Redis持久化介绍
  • 二、Redis持久化方式
    • 1、RDB持久化
      • (1) 介绍
      • (2) RDB持久化触发机制
      • (3) RDB优点和缺点
      • (4) RDB流程
    • 2、AOF(append only file)持久化
      • (1) 介绍
      • (2) AOF优点和缺点
      • (3) AOF文件重写
      • (4) AOF文件重写流程
  • 三、AOF和RDB持久化注意事项

一、Redis持久化介绍

Redis的数据都存放在内存中,如果没有配置持久化,Redis重启后数据就丢失了,于是需要打开Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。

持久化


二、Redis持久化方式

1、RDB持久化

(1) 介绍

RDB持久化能在指定的时间间隔对你的数据进行快照存储。客户端直接通过命令bgsave或者save来创建一个内存快照。

  • bgsave调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程则继续处理命令。
  • save执行过程中,不再响应其它命令。

在redis.conf文件中调整save配置选项,当在规定的时间内,Redis发生了写操作的个数满足条件会触发bgsave命令。
RDB配置示例

注意:900秒和300秒的意思是Redis每隔900秒、300秒检查写的次数。

(2) RDB持久化触发机制

手动触发

  • 通过save命令:会阻塞当前Redis服务器,直到生成完RDB文件,内存比较大的实例会造成长时间的阻塞。
  • 通过bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,阻塞只发生在fork阶段。

被动触发
配置文件中开启save seconds number配置,自动触发bgsave。从节点执行全量复制,主节点自动执行bgsave生成rdb文件。

备注:默认情况下客户端执行shutdown命令,如果没有开启aof持久化则自动执行bgsave。

(3) RDB优点和缺点

RDB优点和缺点

(4) RDB流程

  1. Redis Fork一个子进程,此时有父、子两个进程。
  2. 子进程开始写入数据集到临时的RDB文件中。
  3. 子进程完成写入新的RDB文件后,替换掉旧的。

备注:这种方式利用了写时复制。


2、AOF(append only file)持久化

(1) 介绍

AOF持久化记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复复原始的数据。
AOF配置示例
注意:建议使用默认的策略每秒同步,这种策略相对快且安全。

(2) AOF优点和缺点

AOF优缺点比较

补充:

  • 相同数据集AOF文件通常比RDB大。
  • AOF持久化更慢,取决与具体的fsync策略。
  • 如果重写过程中有写的请求,AOF可能需要更多的内存。
  • 重写过程中,所有写的命令会刷到磁盘两次。

(3) AOF文件重写

不断的写入操作会导致AOF文件越来越大,例如:如果使用incr命令对某个key累加100次,最后的值为100,但AOF文件中会有100条记录,前面99条实际上是无用的。

因此Redis支持一个特性:后台重建AOF,而不影响对外服务,通过发起BGREWRITEAOF命令可以实现AOF文件重写。

在Redis2.2版本中使用AOF每次都需要运行BGREWRITEAOF命令,Redis2.4版本通过配置可以触发自动重写,自动重写默认配置项如下:

  • auto-aof-rewrite-percentage 100:如果当前aof文件大小与上次重写后AOF文件大小的增长百分比为100%,则进行触发BGREWRITEAOF进行自动重写,例如:上次重写后AOF文件大小为5m,当前AOF文件大小为10m,增长百分比为(10-5)/5=100%。
  • auto-aof-rewrite-min-size 64mb:为了避免符合增长百分比触发AOF重写,但AOF文件仍然很小的情况,可以指定重写时的最小文件大小,只有两项条件都满足才触发AOF重写。

(4) AOF文件重写流程

AOF文件重写和RDB也是同样的套路,也是copy-on-write,具体流程如下:

  1. Redis fork一个子进程,此时有父、子两个进程。
  2. 子进程开始在临时文件写入新的AOF内容。
  3. 父进程把所有新的数据变化命令累积到内存缓冲中(同时把新的数据变化命令写到旧的AOF文件),如果重写失败,数据不会丢失。
  4. 子进程完成AOF文件重写后通知父进程,父进程收到信号后,把内存缓冲中的命令追加到子进程生成的新AOF文件末尾。
  5. Redis自动对新文件重命名为旧文件的AOF文件名,新的数据变化命令追加到新的AOF文件中。

三、AOF和RDB持久化注意事项

Redis2.4以上版本要避免RDB持久化时触发AOF重写,或者AOF重写时进行BGSAVE操作,不然两者同时进行磁盘I/O负载很大。

RDB在进行中时,此时用户请求AOF文件重写,服务器会响应状态码OK,以告知用户操作正在计划中,一旦内存快照生成,AOF文件重新就会开始。

如果AOFRDB都启用,那么Redis重启时会优先使用AOF文件进行数据集重建,因为AOF能确保数据是最完整的。

在这里插入图片描述

相关文章:

Redis持久化机制(RDBAOF详解)

目录 一、Redis持久化介绍二、Redis持久化方式1、RDB持久化(1) 介绍(2) RDB持久化触发机制(3) RDB优点和缺点(4) RDB流程 2、AOF(append only file)持久化(1) 介绍(2) AOF优点和缺点(3) AOF文件重写(4) AOF文件重写流程 三、AOF和RDB持久化注意事项 一、Redis持久化介绍 Redis…...

蛋白质结构中pdbx_strand_id和entity_id相互转化

在蛋白质结构中,entity_id 和 pdbx_strand_id 表示的是不同的概念,涉及到不同层次的信息。 1. entity_id (实体 ID): 定义:entity_id 标识蛋白质结构中的一个“实体”(entity)。一个实体可以是一个多肽链、DNA 链、RNA 链,或者某些小分子(如辅因子、配体等)。特点:每…...

【父子线程传值TransmittableThreadLocal使用踩坑-及相关知识拓展】

文章目录 一.业务背景二.TransmittableThreadLocal是什么?三.问题复现1.定义注解DigitalAngel2.定义切面3.TransmittableThreadLocal相关4.线程池配置信息5.Controller6.Service7.测试结果8.问题分析9 解决办法及代码改造10.最终测试: 四.与 ThreadLocal…...

03 快乐树

快乐树 我们由题可以得出结论:一共有三种情况,但实际中第三中情况不存在。 证明第三中情况不存在: 我敲的代码 public boolean isHappy(int n) {int slown;int fastn;while(true) {int sum0;while(slow!0) {sum(slow%10)*(slow%10);slow/1…...

springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)

相册页面及功能展示: react前端结构及代码: Java后端结构及代码 数据库结构: photo: user 这是首个利用AI自有知识构建的简易相册系统,项目是react构造前端spring boot构造后端。 前端有四个主要页面&#xff1…...

Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测|数据分享...

全文链接:https://tecdat.cn/?p37839 分析师:Kefan Yu 在大众旅游蓬勃发展的背景下,乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前,乡村旅游接待设施主要以招待所、小宾馆和农家乐等形式存在。然而,一…...

Spring Boot驱动的交互式作业管理系统:师生共评功能实现

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

基于SSM的旅游网站【附源码】

基于SSM的旅游网站(源码L文说明文档) 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管理 5.1.2 …...

Python实现将目标文本批量存入Word,并将文本段落的开头进行缩进处理(11)

前言 本文是该专栏的第11篇,后面会持续分享Python办公自动化干货知识,记得关注。 在用python对目标文本进行批量自动化操作的时候,你可能会遇到这样的需求——“现有大批量的文本内容,需要通过python将其批量存入docx(word)文档中,而且每个段落的开头需要进行缩进处理”…...

el-select 下拉框选项文字过长解决方案

首先给下拉框设置类名&#xff0c;即popper-class属性&#xff0c;并且给el-option增加title属性 <el-selectv-model"item.portrayalItem"v-loadmore"{ method: lazyItemList, item, index }"multiplefilterableremotepopper-class"dropDown-sele…...

C语言基础语法——类型转换

数据有不同的类型&#xff0c;不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种&#xff1a; 自动类型转换&#xff08;隐式转换&#xff09;&#xff1a;遵循一定的规则&#xff0c;由编译系统自动完成强制类型转换&#xff08;显示转换&#xff09;…...

来电无通话界面问题分析

1、问题描述 场测反馈&#xff0c;无法接到电话&#xff0c;被叫失败。 2、Log分析 从Modem log看&#xff0c;空口确实有上报到有相关通话信息 排查AT相关Log&#xff0c;确实有上报AT< EAIC相关命令 查看相关AT指令 /* * EAIC: <call_id>,<number>,<type…...

物理学基础精解【70】

文章目录 加速度平均加速度和瞬时加速度一、定义二、性质三、数学原理与公式四、例子例题例题一例题二 曲线运动中加速度速率&#xff08;速度大小&#xff09;与曲线运动加速度方向与曲线运动总结 加速度和角加速度加速度与角加速度的基本定义圆周运动中的关系其他运动类型中的…...

HCIP--以太网交换安全(三)MAC地址漂移防止与检测

MAC地址漂移防止与检测 一、MAC地址漂移防止与检测知识点 1.1MAC地址漂移的概述 MAC地址漂移是指交换机上一个vlan内有两个端口学习到同一个MAC地址&#xff0c;后学习到的MAC地址表项覆盖原MAC地址表项的现象。 1.2.MAC地址漂移的防止方法 &#xff08;1&#xff09;配置…...

CSS3--美若天仙!?

免责声明&#xff1a;本文仅做分享~ 目录 CSS引入方式 选择器 盒子尺寸和背景色 文字控制属性 单行文字 垂直居中 字体族 font复合属性 文本对齐方式 文本修饰线 color 文字颜色 ----- 复合选择器 伪类选择器 超链接伪类 CSS特性 继承性 层叠性 优先级 Emmet …...

详细版的Jsoncpp的使用,包括在VS环境下配置

目录 准备环境VS 环境下配置编译使用 基础概述Json 数组Json 对象 Jsoncpp 的使用ValueFastWriterReader示例 如果想要 Json 部署在 Linux 上 参考: https://blog.csdn.net/2303_76953932/article/details/142703683?spm1001.2014.3001.5502 C中原生不支持 Json&#xff0c;所…...

开发指南070-3d模型

平台集成了应用于3d展示场景的相关底层&#xff0c;支持fbx和gltf两种模型格式。 样例如下&#xff1a; <div class"fullcontainer"> <div style"width:80%"> <iframe :src"url" width"100%" height"…...

问卷调查毕设计算机毕业设计投票系统SpringBootSSM框架

目录 一、引言‌ ‌二、需求分析‌ 用户角色‌&#xff1a; ‌功能需求‌&#xff1a; ‌非功能需求‌&#xff1a; ‌三、系统设计‌ ‌技术选型‌&#xff1a; ‌数据库设计‌&#xff1a; ‌界面设计‌&#xff1a; ‌四、实现步骤‌ ‌后端实现‌&#xff1a; …...

JavaWeb三大组件之Servlet

1. Servlet 一、Servlet介绍 1、概念 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;用Java编写的服务器端程序&#xff0c;具有独立于平台和协议的特性&#xff0c;主要功能在于交互式地浏览和生成…...

C++设计模式学习详解(23种)

C设计模式学习详解 设计模式是软件开发中常见问题的可复用解决方案。它们不是可以直接转换为代码的成品&#xff0c;而是描述解决问题的通用方法。C 中常用的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。 一、创建型模式 (Creational Patterns) …...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...