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

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...