当前位置: 首页 > 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) …...

如何让Windows任务栏焕然一新?TranslucentTB给你答案

如何让Windows任务栏焕然一新&#xff1f;TranslucentTB给你答案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 您是否曾对Windows系统一…...

探索Comsol在光子晶体光纤SPR - PCF传感器及光学仿真中的奇妙世界

Comsol光子晶体光纤spr pcf传感器comsol光 Comsol光子晶体光纤spr pcf传感器 comsol光学仿真spr。 利用几何相位缺陷态光子晶体实现谷自旋分离在光学领域&#xff0c;光子晶体光纤&#xff08;PCF&#xff09;以及表面等离子体共振&#xff08;SPR&#xff09;相关的研究一直热…...

手把手教你用STM32驱动迪文屏:从RS232配置到页面控件交互全流程

STM32与迪文屏深度开发实战&#xff1a;工业级GUI交互全解析 迪文屏作为工业控制领域广泛采用的HMI解决方案&#xff0c;其与STM32的协同工作能力已成为嵌入式开发者的必备技能。不同于传统TFT-LCD的简单驱动&#xff0c;迪文屏通过串口协议实现的动态交互&#xff0c;为设备控…...

5大突破!漫画阅读工具Venera重构跨平台阅读体验

5大突破&#xff01;漫画阅读工具Venera重构跨平台阅读体验 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 副标题&#xff1a;如何在Windows、macOS和移动设备间无缝切换你的漫画库&#xff1f; 开篇痛点引入 不同设备间漫…...

Verilog中的strength到底有什么用?一个案例带你理解强弱驱动的实际应用

Verilog中的strength到底有什么用&#xff1f;一个案例带你理解强弱驱动的实际应用 在数字电路设计中&#xff0c;Verilog作为硬件描述语言的标杆&#xff0c;其精确建模能力直接影响仿真结果的可靠性。而strength&#xff08;强度&#xff09;这一常被忽视的特性&#xff0c;恰…...

Excel 技巧:一键批量填充空值

&#x1f680; 操作步骤选中区域首先&#xff0c;用鼠标选中包含空值的目标数据区域。定位空值按下快捷键 Ctrl G 打开“定位”对话框&#xff1a;点击左下角的 「定位条件...」。选择 「空值」。点击「确定」。✅ 此时&#xff0c;区域内所有空白单元格已被高亮选中。输入公式…...

神经高利贷:预支未来技能导致认知崩溃

在软件测试领域&#xff0c;从业者常面临一个隐形威胁&#xff1a;过度追求新技能而忽视认知极限&#xff0c;最终引发崩溃。这种现象被称为“神经高利贷”&#xff0c;即通过预支未来学习能力来应对当前挑战&#xff0c;结果导致认知资源枯竭、错误率飙升&#xff0c;甚至职业…...

密码学实战:从古典密码到AES,手把手教你用Python实现加密算法

密码学实战&#xff1a;从古典密码到AES的Python实现之旅 密码学作为信息安全的核心支柱&#xff0c;其发展历程就像一部浓缩的科技史。从凯撒大帝用过的简单字母替换&#xff0c;到如今保护我们银行卡交易的AES算法&#xff0c;加密技术始终在与破解者进行着无声的较量。本文…...

无限级数求和的Java实现与数学分析

本文旨在详细说明如何使用Java精确计算特定形式的无限级数 S -(2x)^2/2&#xff01; (2x)^4/4&#xff01; - (2x)^6/6&#xff01; ... 在指定区间 [0.1, 1.5] 内部和。我们将深入分析等级数的数学性质&#xff0c;推导其闭合形式&#xff0c;并在此基础上纠正原始Java代码…...

避坑指南:Xilinx MIG降频配置与Synopsys VIP仿真的时序参数设置

Xilinx MIG降频配置与Synopsys VIP仿真的时序参数避坑指南 在高速存储接口设计中&#xff0c;DDR控制器的配置与验证往往是项目成败的关键节点。当遇到需要降频使用的场景时——比如标称2400MHz的颗粒实际运行在2000MHz——工程师往往会在时序参数配置和验证环境匹配上踩坑。本…...