redis持久化理论

0 前言

什么是持久化
redis操作都是在内存中,如果出现宕机的话,数据将不复存在,所以持久化是将内存中的数据刷盘到磁盘中,redis可以提供RDB和AOF将数据写入磁盘中。

一 持久化技术

本章节将介绍持久化RDB和AOF两个技术,以及其混合技术。
Redis 的 RDB(Redis DataBase)持久化技术是一种将 Redis 在内存中的数据保存到磁盘上的持久化方式,以指定的时间间隔执行数据集的时间点快照。
在这里插入图片描述

其原理如下:
快照生成: RDB 会将 Redis 某一时刻的内存数据以快照的形式保存到磁盘上,生成一个 dump.rdb 文件。该文件是一个经过压缩的二进制文件,默认存储在当前目录。
** 子进程操作:** 当满足触发条件时,Redis 父进程会 fork 出一个子进程来进行 RDB 文件的创建和写入。子进程会继承父进程的内存数据,然后将这些数据写入到临时文件中。在这个过程中,父进程可以继续处理客户端的请求,不会因为持久化操作而被阻塞。当子进程完成写操作后,会用新生成的临时文件替换旧的 RDB 文件。
触发方式:
手动触发:

  • SAVE 命令:由主进程直接进行快照操作,在生成 RDB 文件期间,Redis 服务器会阻塞,无法处理其他客户端请求,因此一般线上环境不建议使用。
  • BGSAVE 命令:通过 fork 子进程来进行快照操作,子进程负责创建 RDB 文件,而父进程则可以继续处理请求。此命令执行过程中只有 fork 子进程时会短暂阻塞服务器,对客户端请求的影响较小。
    自动触发:
  • 配置文件参数:在 redis.conf 配置文件中,可以通过设置 save m n 参数来指定自动触发 RDB 持久化的条件,其中 m 表示时间间隔,n 表示在该时间间隔内数据的修改次数。例如 save 900 1 表示在 900 秒内如果至少有 1 个 key 发生变化,则执行 bg save。其中默认的时间与频次如下:
    在这里插入图片描述举一个管网中的例子,刷新RDB的时间间隔,以及时间间隔内发生的修改:
    在这里插入图片描述
    其中dump文件的路径需要指定:
dir /myredis/dumpfiles

  • 主从复制触发:在主从复制场景下,如果从节点执行全量复制操作,则主节点会执行 bgsave 命令,并将 rdb 文件发送给从节点。
  • 执行特定命令触发:执行 shutdown 命令关闭 Redis 时,也会触发 RDB 持久化。

在这里插入图片描述
那些情况触发RDB
在这里插入图片描述
禁止使用快照
在这里插入图片描述
禁用快照:
在这里插入图片描述
RDB参数配置的优化
在这里插入图片描述
在这里插入图片描述

redis7时,RDB保存时间做了调整,将持久化文件RDB的保存规则发生了改变,尤其是时间记录频率变化。
备注:不可以把备份文件dump.rdb和生产redis服务器放在同一台机器上,必须分开各自存储,以防止生产机物理损坏后备份也挂了。*

RDB和AOF之间的优缺点

RDB的优点:
1.性能最大化:在开始持久化时,Redis 只需 fork 出子进程,之后由子进程完成持久化工作,避免了服务进程执行 IO 操作,大大提高了性能。
2.适合大规模数据备份:由于 RDB 文件是一个完整的数据库快照,非常适合进行大规模的数据备份,可以将 RDB 文件压缩后转移到其他存储介质上。
3.启动加载速度快:相比于 AOF 机制,RDB 文件在恢复数据时速度更快,因为只需要加载整个数据集即可。

RDB的缺点:
1.数据丢失风险:如果系统在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2.服务器阻塞问题:当数据集较大时,fork 子进程可能会导致整个服务器停止服务几百毫秒,甚至 1 秒钟。
3. 版本兼容性问题:RDB 文件使用特定的二进制格式保存,Redis 版本演进过程中可能会出现多个 RDB 版本,存在一定的版本兼容性风险。

二、AOF持久化技术

AOF持久化将每个写操作(如SET、DEL等)以追加的方式写入一个文件(AOF文件)。Redis重启时,会读取AOF文件并重新执行这些命令,从而恢复数据。
设置AOF持久化,需要在redis.conf文件中配置

appendonly yes 

2.1 AOF的工作流程

1.Client作为命令的来源,会有多个源头以及源源不断的请求命令。
2.在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
3.AOF缓冲会根据AOF缓冲区同步文件的 三种写回策将命令写入磁盘上的AOF文件。
4.随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的。
5.当Redis Server服务器重启的时候会从AOF文件载入数据。
在这里插入图片描述
r

2.1.1 Redis提供了三种AOF文件同步策略

always:每次写操作都同步到磁盘,数据安全性最高,但性能最差。
everysec:每秒同步一次,平衡了性能和数据安全。
no:由操作系统决定同步时机,性能最好,但数据安全性最低。
在这里插入图片描述

2.1.2 redis7新特性

在这里插入图片描述
文件的保存路径
redis6,AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis.conf配置文件的dir配置
redis7,最终路径。比如下图所示,AOF会在myredis/appendonlydir生成.aof文件。
在这里插入图片描述
redis有且仅有一个文件。
redis7的aof文件,一共有1到3个,分别是base基本文件,incr增量文件,manifest清单文件。
在这里插入图片描述
在这里插入图片描述

增量文件中不符合语法规则的数据进行清空,可使用一下命令。
在这里插入图片描述

2.2 AOP的优缺点

2.2.1 优势

  • 使用 AOF Redis 更加持久:您可以有不同的 fsync 策略:根本不fsync、每秒 fsync、每次查询时 fsync。使用每秒 fsync 的默认策略,写入性能仍然很棒。fsync 是使用后台线程执行的,当没有 fsync 正在进行时,主线程将努力执行写入,因此您只能丢失一秒钟的写入。
  • AOF 日志是一个仅附加日志,因此不会出现寻道问题,也不会在断电时出现损坏问题。即使由于某种原因(磁盘已满或其他原因)日志以驾一半的命令结尾,redis-check-aof 工具也能够轻松修复它
  • 当 AOF 变得太大时,Redis 能够在后台自动重写 AOF。重写是完全安全的,因为当 Redis 继续附加到旧文件时,会使用创建当前数据集所需的最少操作集生成一个全新的文件,一旦第个文件准备就绪,Redis 就会切换两者并开始附加到新的那一个。
  • AOF 以易于理解和解析的格式依次包含所有操作的日志。您甚至可以轻松导出 AOF 文件。例如,即使您不小心使用该FLUSHALL命令刷新了所有内容,只要在此期间没有执行日志重写,您仍然可以通过停止服务器、删除最新命令并重新启动 Redis 来保存您的数据集.

2.2.2 缺点

  • AOF 文件通常比相同数据集的等效 RDB 文件大。
  • 根据确切的 fsync 策略,AOF 可能比 RDB 慢。一般来说,将 fsync 设置为每秒性能仍然非常高,并且在禁用 fsync 的情况下,即使在高负载下它也应该与 RDB 一样快。即使在巨大的写入负载的情况下,RDB 仍然能够提供关于最大延迟的更多保证。

2.3 AOF重写机制

随着时间推移,AOF文件会变得庞大,可能包含冗余命令。Redis提供了AOF重写机制,通过创建一个新的AOF文件来移除冗余命令,从而减小文件大小并加快恢复速度。
1.手动触发:通过执行BGREWRITEAOF命令,Redis会在后台启动AOF重写过程。
2.自动触发:Redis会根据配置的规则自动触发AOF重写。相关配置参数如下:

  • auto-aof-rewrite-percentage:当前AOF文件大小比上次重写后文件大小的增长百分比。
  • auto-aof-rewrite-min-size:AOF文件的最小大小,只有超过该大小才会触发重写。
    默认配置为:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

这意味着当AOF文件大小比上次重写后的大小增加100%(即翻倍),并且文件大小至少为64MB时,Redis会自动触发AOF重写。
重写机制演示案例,其中基础文件同一个可以只记录最新的值,不记录历史值,base文件相当于瘦身aof文件。
在这里插入图片描述

2.4. AOF重写的执行过程

AOF重写是通过子进程完成的,不会阻塞主进程的正常运行。具体过程如下:
1.主进程fork子进程:主进程会fork一个子进程来执行AOF重写任务。
2.子进程生成新AOF文件:子进程根据当前数据库状态生成新的AOF文件。
3.主进程继续处理请求:在子进程重写期间,主进程会继续处理客户端请求,并将新的写操作命令写入AOF缓冲区和AOF重写缓冲区。
4.子进程完成重写:当子进程完成重写后,会通知主进程。
5.主进程处理重写缓冲区:主进程将AOF重写缓冲区中的命令追加到新的AOF文件中。
6.替换旧文件:最后,Redis用新的AOF文件替换旧的AOF文件。

2.5 AOP配置总结

在这里插入图片描述

三 RDB-AOF混合持久化

如果同时开启RDB和AOF持久化,重启时只会加载aof文件,不会加载 rdb。
在这里插入图片描述

3.1 何选择

RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.。

3.1.1 同时开启两种持久化方式

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),留着rdb作为一个万一的手段。

推荐使用方式:RDB+AOF

3.2 同时关闭RDB和AOF

此模式是纯缓存模式

save “” 禁用RDB,禁用rdb持久化模式下,我们仍可以使用命令save,bgsave生成rdb文件
appendonly no  禁用aof,禁用aof模式下,我们仍可以使用bdwriteaof生成aof文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂,其末端执行器的位置可以表示为: 其中: L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI(ArkUI-方舟UI框架) 文本使用 文本显示 (Text/Span) Text是文本组件,通常用于展示用户视图,如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…

科技赋能数字内容体验的核心技术探索

内容概要 在数字化时代,科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径,而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下,数字内…

详细教程 | 如何使用DolphinScheduler调度Flink实时任务

Apache DolphinScheduler 非常适用于实时数据处理场景,尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能,包括任务依赖管理、动态调度、实时监控和日志管理,能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…

棋盘(二维差分)

题目: 5396. 棋盘 题目 提交记录 讨论 题解 视频讲解 小蓝拥有 nnnn 大小的棋盘,一开始棋盘上全都是白子。 小蓝进行了 mm 次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色,黑色棋子变…

MySQL数据库基础(创建/删除 数据库/表)

一、数据库的操作 1.1 显示当前数据库 语法&#xff1a;show databases&#xff1b; <1>show 是一个关键字&#xff0c;表示要执行的操作类型 <2>databases 是复数&#xff0c;表示显示所有数据库 上面的数据库中&#xff0c;除了java113&#xff0c;其它的数据库…

【WebLogic】Oracle发布WebLogic 14c最新版本-14.1.2.0

根据Oracle官方产品经理的博客&#xff0c;Oracle于2024年12月20日正式对外发布了WebLogic 14c的第二个正式版本&#xff0c;版本号为 14.1.2.0.0 &#xff0c;目前官方已开放客户端下载。该版本除继续支持 Jakarta EE 8 版本外&#xff0c;还增加了对 Java SE 17&#xff08;J…

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…

springboot+vue导入ruoyi项目的框架

一、介绍 RuoYi-Vue版本&#xff0c;采用了前后端分离的单体架构设计软件环境&#xff1a;JDK、Mysql、Redis、Maven、Node技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus官方地址: https://gitee.com/y_project/RuoYi-Vue 官方推荐的版本如下&a…

jvm 篇

字节码的作用 ‌跨平台性‌&#xff1a;字节码是Java实现跨平台特性的关键。Java源代码编译成字节码后&#xff0c;可以在任何安装了Java虚拟机&#xff08;JVM&#xff09;的设备上运行&#xff0c;这使得Java应用程序能够在不同的操作系统和硬件平台上运行而无需重新编译。‌…

【Springboot】Springboot 自定义线程池的参数配置最优是多少

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【2】Cisco SD-WAN 组件介绍

1. 概述 Cisco SD-WAN 是一套基于软件定义的广域网(SD-WAN)解决方案,能够提供安全、可扩展且高效的网络连接。它通过集中的控制和智能路径选择,实现跨多个站点的可靠性、可见性和优化。 在 Cisco SD-WAN 体系架构中,主要由四个核心组件构成: vManage(管理平面) vSmart…

测试中的第一性原理:回归本质的质量思维革命

在软件工程领域&#xff0c;测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境&#xff0c;第一性原理&#xff08;First Principles Thinking&#xff09;提供了独特的解题视角&#xff…

《chatwise:DeepSeek的界面部署》

ChatWise&#xff1a;DeepSeek的界面部署 摘要 本文详细描述了DeepSeek公司针对其核心业务系统进行的界面部署工作。从需求分析到技术实现&#xff0c;再到测试与优化&#xff0c;全面阐述了整个部署过程中的关键步骤和解决方案。通过本文&#xff0c;读者可以深入了解DeepSee…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

什么是AIOps?

AIOps&#xff08;人工智能运维&#xff0c;Artificial Intelligence for IT Operations&#xff09;是通过使用人工智能&#xff08;AI&#xff09;技术来增强 IT 运维&#xff08;IT Operations&#xff09;的智能化、自动化和效率的概念。它结合了机器学习、数据分析、自动化…

使用deepseek快速创作ppt

目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型&#xff0c;其推理能力炸裂&#xff0c;但是DeepSeek官方没有提供生成PPT功能&#xff0c;如果让DeepSeek做PPT呢&#xff1f; 有个途径&#xff1a;在DeepSeek让其深度思考做出PPT脚本&#xf…

DeepSeek 引领的 AI 范式转变与存储架构的演进

近一段时间&#xff0c;生成式 AI 技术经历了飞速的进步&#xff0c;尤其是在强推理模型&#xff08;Reasoning-LLM&#xff09;的推动下&#xff0c;AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例&#xff0c;如今的 AI 技术发展已不局限于依赖…

vscode 设置在编辑器的标签页超出可视范围时自动换行(workbench.editor.wrapTabs)

“workbench.editor.wrapTabs”: true 是 VS Code&#xff08;Visual Studio Code&#xff09; 的一个设置项&#xff0c;它的作用是 在编辑器的标签页超出可视范围时自动换行&#xff0c;而不是显示滚动条。 需要修改settings.json 参考&#xff1a;settings.json 默认值&a…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…