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

news2024/12/24 1:43:03

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

本系列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 命令,由于是在触发重写后才会更新文件,可能会丢失重写后的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1894508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学Spring之自动装配 Bean

Bean 的作用域: 1.单例模式(Spring 默认机制) scope“singleton” 2.原型模式:每次从容器中 get 时,都会产生一个新对象 scope"prototype" 3. request、session、application,只能在 web 开…

不可变集合

目录 1.1 什么是不可变集合 1.2 不可变集合分类 1.3 不可变的list集合:list of 1.4 不可变的Set集合:set.of 1.5 不可变的Map集合 1.5.1:键值对个数小于等于10 1.5.2:键值对个数大于10 Map.ofEntries方法: copy…

JBoss JMXInvokerServlet 反序列化漏洞

漏洞原理: 这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。 影响版本: JBoss Enterprise Application Platform 6…

如视“VR+AI”实力闪耀2024世界人工智能大会

7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(以下简称为“WAIC 2024”)在上海盛大开幕,本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办,围绕“以共商促共享 以善治促善智”主题&#xf…

【虚拟机】虚拟机网络无法访问问题【已解决】

【虚拟机】虚拟机无法上网问题【已解决】 问题探究解决方法法1:查看相关“网络服务”是否处于正常启动状态法2:重启网络法3:重新安装VMWare法4:使用NAT模式,每次打开win7都没连上网的解决办法 问题探究 安装了很多个虚…

昇思MindSpore学习总结八——静态图加速

AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。两种运行模式的详细介绍如下: 1、动态图模式 动态图的特点是计算图的构建和计算同时发生(D…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法,使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上,所有的vue模板都是语法层面的HTML,可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。 今天要介绍的这位同学,是来自深圳中学的高二某班的欧阳达晟同学&#x…

一、强化学习基本概念

一、强化学习基本概念 1.1 何为强化学习?1.2 强化学习的环境1.3 强化学习的目标1.4 强化学习的数据 1.1 何为强化学习? 强化学习(Reinforcement Learning, RL)是机器通过与环境交互来实现目标的一种计算方法。机器和环境的一轮交互是指:机器在…

Spring AI之后,阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI

阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI 1.Spring AI2.Spring Cloud Alibaba AI3. 接入体验 1.Spring AI Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通…

安装Anaconda找不到旧版本怎么办?

标题Anaconda官网:https://www.anaconda.com/ 对于个人学习使用,不用下载最新版本,使用之前的版本相对还是比较稳定的。所以需要寻找旧版网址。 标题旧版网址:https://repo.anaconda.com/archive/ 里面多种版本选择 然后选择自…

解决前端登录成功之后,往后端发请求携带cookie问题

项目背景: 今天在做伙伴匹配系统: 我现在实现的功能是: 在我登录成功之后,就进入了主页(默认页),在我访问用户页的时候产生的问题 首先说明一下这个Cookie的问题: 我们登录成功…

Django 定义模型执行迁移

1,创建应用 Test/app8 python manage.py startapp app8 2,注册应用 Test/Test/settings.py 3,配置路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(app8/, include(a…

SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,SO Oladejo受到徒步旅行启发,提出了徒步优化算法(Hiking Optimization Algorithm, HOA)。 2.算法原理 2.1算法思想 HOA灵感来自于…

机器人控制系列教程之Delta机器人动力学分析

动力学简介 机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。 意义:对并联机器人动力学分析的意义体现在: 为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提…

windows@资源管理器中的地址栏@访问共享文件夹的各种方法@管理共享文件夹

文章目录 资源管理器中的地址栏可以访问什么访问共享文件夹👺UNC路径资源管理器打开共享文件夹纯命令行方式访问共享文件夹 共享文件夹相关操作查看所有已经共享的文件夹👺停止某个文件的共享 共享文件夹的访问控制补充匿名访问问题😊强制启用…

VSCode 自动调整格式失效了 ESLint

ESLint【最新注意2.4.4版本有问题,需退回2.4.2版本就恢复正常了】 参考:vscode自动格式化失效_vscode保存自动格式化失效-CSDN博客

C++内存管理(候捷)第一讲 笔记

内存分配的每一层面 applications可以调用STL,里面会有allocator进行内存分配;也可以使用C 基本工具primitives,比如new, new[], new(), ::operator new();还可以使用更底层的malloc和free分配和释放内存。最底层的是系统调用&…

Android adb logcat日志过滤输出

Android adb logcat日志过滤输出 adb logcat 输出所有Android设备上的日志。 adb logcat *:Error 过滤输出日志级别只为Error的日志。 过滤某些标签或tag,依次执行: adb shell logcat grep | "你的标签或tag" Android Studio level过滤查看各个等级的日志…

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…