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

Redis 7.x 系列【17】四种持久化策略

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 案例演示
      • 2.1 无持久化
      • 2.2 RDB
      • 2.3 AOF
      • 2.4 混合模式
        • 2.4.1 方式一: 同时开启
        • 2.4.2 方式二: 只开启 AOF

1. 概述

持久化官方文档

在前两篇文档中,我们学习了RDBAOF的相关知识,它们各有优缺点。在实际应用中,需要根据场景选择适合的持久化策略。

Redis 支持以下四种方式:

  • 无持久化:同时关闭RDBAOF
  • RDB:只开启RDB
  • AOF:只开启AOF
  • 混合模式:同时支持RDBAOF

2. 案例演示

2.1 无持久化

适用于以下场景:

  • 缓存层:作为数据库查询缓存时,如果数据丢失,可以重新获取并填充到缓存中,持久化不是必需的。
  • 实时分析:在实时数据流处理或分析中,Redis 可能被用作一个中间存储层,用于聚合、过滤或转换数据。由于这些数据通常是实时生成的,并且只在一段时间内需要,因此可能不需要持久化。一旦分析完成或数据过期,它们就可以被丢弃。
  • 临时存储:在某些应用中,Redis 可能被用作临时存储来存储会话数据、临时令牌或其他短生命周期的信息。由于这些数据本质上是临时的,并且在一段时间后会被丢弃或失效,因此可能不需要持久化。

redis.conf中同时关闭RDBAOF

save ""
appendonly no

注意,关闭后是依然可以使用savebgsavebgrewriteaof命令生成文件。

默认启用RDB,所以在安装目录可以看到 dump.rdb 文件:

在这里插入图片描述

dump.rdb 文件删除,然后启动 Redis ,虽然之前存入了数据,但是因为没有恢复文件,所以数据库是空:

在这里插入图片描述
重新存入数据后,由于禁用了 RDB ,所以不会生成dump.rdb 文件,一旦重新启,所有数据将会丢失。

2.2 RDB

Redis 默认启用RDB持久化,只生成单个二进制文件,比AOF性能更好,但是可能会存在数据丢失问题。Redis 本身是十分稳定的,适用于对数据一致性要求不是特别高的场景:

  • 主从复制Redis主从复制架构中,RDB被用作数据同步的一种机制。主节点可以生成RDB文件,然后发送给从节点,用于初次全量复制或连接重建时的快速同步。
  • 恢复和备份RDB 文件是一个紧凑的二进制文件,可以很方便地进行备份、传输和恢复。
  • 缓存层:作为数据库缓存时,如果数据丢失,可以重新获取并填充到缓存中。

redis.conf中开启RDB

# 关闭
# save "" 
# 开启,每隔600秒(10分钟)检查一次,如果在这段时间内至少发生了10次写操作,则执行一次RDB快照保存
save 600 10

存入数据后,关闭Redis 时,会触发生成RDB 文件。重启时会重新加载到内存中。执行多次写入操作,可以看到触发了保存规则,开启了子线程进行RDB生成:

在这里插入图片描述
总结:可以接受在灾难情况下丢失几分钟的数据。

2.3 AOF

AOF 相较于 RDB 其主要缺点就是性能不如 RDB ,适用于数据一致性要求较高的场景。默认情况下是关闭的,需要在redis.conf中主动开启:

# 关闭 RDB
save "" 
# 开启AOF
appendonly yes

重启 Redis 后,在控制台可以看到创建了AOF 的基础文件和增量文件:
在这里插入图片描述
appendonlydir (默认存储目录)下可以看到相关文件:
在这里插入图片描述

2.4 混合模式

RDBAOF 各有特点,在技术选型时是一个权衡点,其特点对比如下:

RDBAOF
持久化机制定期保存快照实时命令追加
文件大小二进制文件,体积较小文本、二进制文件,体积较大
恢复速度原生压缩数据,速度快写命令数据,相对较慢
容灾能力数据可能有丢失数据可能有丢失(最后一条命令或最后一秒)
使用场景定期备份、大规模数据恢复低/轻量级
资源消耗高/重量级数据丢失容忍度低
启动优先级

在官方文档中,有提到如果想要获得与 PostgreSQL 级别的数据安全性,应该同时使用两种持久化方式。
在这里插入图片描述

2.4.1 方式一: 同时开启

在配置文件中同时开启RDBAOF持久化:

# 开启RDB
save 600 10
# 开启AOF
appendonly yes

当触发了规则后,会同时生成RDBAOF文件:

在这里插入图片描述
同时开启的条件下,重启时会优先读取AOF文件:

在这里插入图片描述
这种方式下,同时维护两套持久化机制,对性能会造成一定的影响。

2.4.2 方式二: 只开启 AOF

AOF 本身已经提供了混合持久化机制,在Redis 7.x 系列【16】持久化机制之 AOF中有介绍过一个配置参数:

aof-use-rdb-preamble yes

Redis 6 中,开启此配置后(默认开启),重写 的AOF 文件由两个不同的部分组成:

  • RDB file:数据快照
  • AOF tail:记录写操作

在重启加载过程中,Redis 会识别 AOF 文件以 “REDIS” 字符串开头,并加载 RDB 快照数据,然后继续加载 AOF 相关的内容,以实现更快的重写和恢复速度。

Redis 7 中,开启此配置后(默认开启),在 AOF 重写时,会将当前时刻的数据快照保存为单个的 RDB 文件,后续的写操作也保存为单独的 AOF 文件:

在这里插入图片描述
在全量备份时,这里的 RDB 文件可以作为恢复文件,无需再单独执行 BGSAVE 命令,由于是在触发重写后才会更新文件,可能会丢失重写后的数据。

相关文章:

Redis 7.x 系列【17】四种持久化策略

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一:…...

开发经验:go切片的继承

package main import ( "errors" "fmt" ) // LimitedSlice 是一个封装了切片的结构体,用于限制切片的最大容量 type LimitedSlice struct { slice []int maxCap int } // NewLimitedSlice 创建一个新的LimitedSlice实例&#xff…...

PyQt5事件机制解析:从原理到实战一网打尽!

PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...

GraphQL与RESTful API的区别和优势

GraphQL GraphQL是一种用于API设计的语言和查询协议,由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段,而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中,客户端发送一个单一的请求,而服务器返…...

关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

【HarmonyOS NEXT】鸿蒙Socket 连接

简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP:传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发 ),系统具有完整的源代码和…...

【vue】实现自动轮播+滚轮控制

前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”

随着数字经济时代的到来,数据已成为最有价值的生产要素,是企业的重要资产之一。随着数据流动性的增强,数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业,面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninsta…...

【Python】变量与基本数据类型

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据:参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…...

Unity按键表大全

Unity键值对应表# KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键,以下是键值对应列表: 常用键# Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 小键盘# …...

第一周java。2

方法的作用 将重复的代码包装起来,写成方法,提高代码的复用性。 方法的语法 方法的语法格式如下 : [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体return 返回值; } 定义方法语法格式的详细说明如下&#xf…...

Arduino - Keypad 键盘

Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中,我们将学习: How to use key…...

国产芯片方案/蓝牙咖啡电子秤方案研发

咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…...

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…...

剧本杀小程序:助力商家发展,提高游戏体验

近几年,剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比,剧本杀游戏具有强大的社交性,玩家在游戏中既可以推理玩游戏,也可以与其他玩家交流互动,提高玩家的游戏体验感。 随着互联网的发展&#xf…...

pikachu靶场 利用Rce上传一句话木马案例(工具:中国蚁剑)

目录 一、准备靶场,进入RCE 二、测试写入文件 三、使用中国蚁剑 一、准备靶场,进入RCE 我这里用的是pikachu 打开pikachu靶场,选择 RCE > exec "ping" 测试是否存在 Rce 漏洞 因为我们猜测在这个 ping 功能是直接调用系统…...

CenterOS7安装java

CenterOS7安装java #进入安装目录 cd /usr/local/soft/java#wget下载java8 #直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了 #不时间的下载链接不一样 wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c9…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...