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

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...