【从零开始学习Redis | 第十一篇】快速介绍Redis持久化策略

前言: 

        Redis 作为一种快速、高效的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景。然而,由于其特性是基于内存的,一旦服务器进程退出,内存中的数据就会丢失。为了解决这一问题,Redis 提供了持久化功能,可以将内存中的数据保存到硬盘上,以便在服务器重启时恢复数据。持久化是 Redis 的关键特性之一,对于确保数据的安全性和可靠性至关重要。本文将深入探讨 Redis 的持久化策略,包括常用的持久化方式以及各自的优缺点

目录

前言: 

RDB:

执行方式: 

缺点:

AOF:

工作原理:

执行方式:

总结:


当Redis崩溃之后,Redis中的数据就会丢失掉。在Redis重建缓存的过程中,如果有大量请求访问,就会直接打到MySQL中,有可能会导致MySQL崩溃。

归根结底是因为:我们没有给Redis中的数据做持久化。而Redis本身它是有持久化策略的,那就是RDBAOF

RDB:

RDB  的全称是Redis Database Backup file(Redis数据备份文件),也叫做Redis数据快照。

  1. 工作原理

    • Redis 在指定的时间间隔内(由用户配置),将内存中的数据库状态以快照的形式保存到磁盘上。
    • Redis 会 fork 出一个子进程来执行保存操作,父进程继续处理客户端请求。这样可以避免阻塞主进程,保证了服务的正常响应。
  2. 生成的文件

    • RDB 文件是一个经过压缩的二进制文件,通常以 .rdb 为扩展名。
    • RDB 文件记录了 Redis 在某个时间点上的数据库状态,包括所有的键值对、过期时间、数据库配置等信息。

执行方式: 

手动执行RDB:

Redis主进程执行RDB,阻塞其他命令

SAVE

 Redis子进程执行RDB,主进程仍然可以接收命令

BGSAVE

自动执行RDB:

Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

这里官方为我们提供了三种RDB的触发频率:

  • 每 3600 秒(1 小时),如果至少有 1 次写操作;
  • 每 300 秒(5 分钟),如果至少有 100 次写操作;
  • 每 60 秒,如果至少有 10000 次写操作。

 BGSAVE的命令流程:

BGSAVE有一个问题:当我们开启子进程去写RDB文件的时候,此时主进程仍然是可以接受用户命令的。在这个过程中就可能会出现脏数据。 

缺点:

  1. 全量备份

    • RDB 是一种全量备份方式,它只会保存生成 RDB 文件时的数据库状态。这意味着如果 Redis 服务器意外崩溃,最后一次保存后的所有数据更改都将丢失。对于一些对数据完整性要求极高的应用,这种全量备份的方式可能不够理想。
  2. 数据丢失风险

    • RDB 持久化的保存间隔可以设置得很长,例如默认的每小时一次,或者更长。如果 Redis 服务器在两次保存之间崩溃,将会丢失整个时间段内的所有更改,导致数据丢失的风险。
  3. 性能开销

    • 在执行 RDB 持久化时,Redis 会 fork 出一个子进程来执行保存操作。这个过程中需要消耗一定的系统资源和时间,可能会影响 Redis 服务器的性能。特别是在数据量较大、保存频率较高的情况下,保存操作可能会导致系统负载升高,甚至影响到用户请求的响应时间。
  4. 不适合实时备份

    • 由于 RDB 是全量备份,生成 RDB 文件的过程可能会消耗大量的时间和资源,因此不适合在实时或高频率的数据备份场景中使用。如果需要实时备份,可能需要考虑其他方式,比如使用 AOF(Append-Only File)持久化方式。
  5. 可用性和恢复时间

    • 在使用 RDB 持久化时,恢复数据通常需要加载整个 RDB 文件,这可能会导致较长的恢复时间,尤其是当数据量较大时。这会影响 Redis 服务器的可用性,特别是在紧急情况下需要快速恢复服务时。

我们可以简单的理解把RDB理解为定期持久化内存数据库中的所有数据

AOF:

AOF全程叫做 Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF中,可以看作是命令日志文件。

工作原理:

  1. 追加写入

    • Redis 将每个写操作以追加的方式记录到 AOF 文件末尾,而不是像 RDB 那样周期性地保存整个数据集的快照。这意味着 AOF 文件包含了重放服务器写操作所需的所有信息。
  2. 重放恢复

    • 当 Redis 重新启动时,它会按顺序重放 AOF 文件中的写操作,以恢复服务器的状态。通过逐行执行 AOF 文件中的命令,Redis 可以将数据集恢复到最后一次保存时的状态。
  3. 重写机制

    • 为了避免 AOF 文件过大而影响性能,Redis 提供了 AOF Rewrite 机制。AOF Rewrite 会在后台启动一个子进程,该进程会重新生成一个新的 AOF 文件,但新文件的大小通常会比原始文件小得多,因为它只包含重要的写操作指令。重写后的 AOF 文件可以替代原始文件,以节省磁盘空间并提高性能。

执行方式:

AOF默认是关闭的,我们可以通过修改redis.conf配置文件来开启AOF:

AOF文件的名称: 

 AOF执行策略:

官网一共为我们提供了三种执行策略:

配置项刷盘时机优点缺点
Always同步刷盘可靠性高,几乎不丢数据对性能要求高
everysec每秒刷盘性能适中最多丢失一秒数据
no操作系统控制性能最好可靠性差,可能会丢失大量数据

可以用图来展示AOF的机制 

这里其实就暴漏了AOF的一个问题:可能会记录大量无意义的命令。比如我们记录对一个Key的多次写操作,但是只有最后一次才有意义。

通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同的效果。而Redis也会在阈值触发的时候自动重写AOF文件,阈值也可以在redis.conf中进行配置:

总结:

         Redis 的持久化策略是确保数据安全性和可靠性的重要手段之一。通过持久化,Redis 可以将内存中的数据定期写入到硬盘上,从而在服务器重启时能够恢复数据。本文介绍了 Redis 的两种主要持久化方式:RDB(Redis DataBase)AOF(Append Only File),并分析了它们各自的优缺点。RDB 方式适用于备份和恢复大量数据,而 AOF 方式则适用于实时数据的持久化和灾难恢复。合理选择和配置持久化方式,可以根据业务需求和性能要求来平衡数据的安全性和性能。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

IT技术产品:开发者极为重要的思维习惯

1、特色内容预告 1、我用敏捷开发思维,提高工作效率。 2、我用代码批判思维,逐渐让自己的作品变得无可挑剔。 3、我是一个顶级程序员,是哪些重要的专业习惯,让我如此优秀? 2、可以免费获取到的IT资源 1、《软件工程&a…

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波)

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波) 文章目录 ADXL345的一般读取方式ADXL345的中断读取方式(单次测量)角度计算卡尔曼滤波优化后完整代码附录:压缩字符串、大小端格式…

计算机vcruntime140.dll找不到如何修复,分享5种靠谱的修复教程

当您在运行某个应用程序或游戏时遇到提示“找不到vcruntime140.dll”,这通常意味着系统中缺少了Visual C Redistributable for Visual Studio 2015或更高版本的一个重要组件。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。小编将…

手撸XXL-JOB(三)——本地定时任务管理平台

引言 在XXL-JOB中,有一个xxl-job-admin项目,这个就相当于定时任务的调度平台,我们参考XXL-JOB,也添加这么一个调度平台,由于篇幅有限,我们先实现一个本地的定时任务调度平台,至于如何调用远程的…

算法练习day8

反转字符串 代码随想录 0344.反转字符串 344. 反转字符串 - 力扣(LeetCode) (用时:0.05小时) 思路 这道题很简单也很经典。 字符串的反转方法有很多,我这里是用for循环通过数组长度和下标计算来交换。…

【小积累】@Qualifier注解

今天在看rabbitMQ的时候需要绑定交换机和队列,交换机和队列都已经注入到spring容器中,写了一个配置类,使用了bean注解注入的。所以这时候绑定的时候需要使用容器中的交换机和队列,必须要使用Qualifier去确定是容器中的哪个bean对象…

【Unity Shader入门精要 第7章】基础纹理补充内容:MipMap原理

1.纹理采样 我们对纹理采样进行显示的过程,可以理解为将屏幕上的一个像素(下文用像素表示)映射到纹理上的一个像素(下文用纹素表示),然后用纹理上的这个像素的颜色进行显示。 理想情况下,屏幕…

Optional用法

说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章: Stream流使用 使用 1.保证值存在 // 1.保证值存在,pageNumber,pageSizeInte…

HTTP基础概念和HTTP缓存技术

什么是HTTP HTTP是超文本传输协议,主要分为三个部分:超文本、传输、协议。 超文本是指:文字、图片、视频的混合体。传输是指:点与点之间的信息通信。协议是指:通信时的行为规范或约定 HTTP常见字段 字段名 解释 例…

图片标签 以及 常见的图片的格式

1.图片的基本使用 2.图片的常见格式 3.bmp格式

前端已死? Bootstrap--JS-jQuery

目录 Bootstrap--JS-jQuery 1 jQuery基础 介绍 基础语法: $(selector).action() 1.1 安装jQuery 地址 基础语法: $(selector).action() 2 jQuery事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。 jQuery常用事件 2.1 鼠标事件…

element-ui的表单中,输入框、级联选择器的长度设置

使用<el-col>控制输入框的长度 <el-form-item label"姓名" label-width"80px"><el-col :span"15"><el-input v-model"form.name" autocomplete"off"></el-input></el-col></el-form…

AI助力内容创作:让效率与质量齐飞

简述&#xff1a; 本文介绍了AI如何帮助创作者在保持内容质量的同时&#xff0c;大幅度提升生产效率的一些方法&#xff0c;希想 对大家有帮助。 一、自动化内容生成 1. 文本内容生成 使用GPT等模型&#xff1a;利用如GPT-3或GPT-4等大型语言模型&#xff0c;可以直接输入关…

[译文] 恶意代码分析:2.LNK文件伪装成证书传播RokRAT恶意软件(含无文件攻击)

这是作者新开的一个专栏&#xff0c;主要翻译国外知名安全厂商的技术报告和安全技术&#xff0c;了解它们的前沿技术&#xff0c;学习它们威胁溯源和恶意代码分析的方法&#xff0c;希望对您有所帮助。当然&#xff0c;由于作者英语有限&#xff0c;会借助LLM进行校验和润色&am…

Github项目管理——仓库概述(一)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

28、查看Qt源码

一、方法1 在安装Qt时&#xff0c;需要勾选“Sources” 在Qt的安装目录Qt5.12.10\5.12.10\Src中可以找到Qt的源码 二、方法2 访问如下网址&#xff08;需要翻墙&#xff09; https://codebrowser.dev/ 在搜索框中输入要查找的信息&#xff0c;如&#xff1a;QMainWindow&…

【IDE】com.intellij.debugger.engine.evaluation.EvaluateException

目录标题 报错重现代码分析解决方式 报错重现 Error during generated code invocation com.intellij.debugger.engine.evaluation.EvaluateException: Method threw java.lang.NullPointerException exception.代码分析 //ls来自上下文 ls.stream().map(m->m.getRewardTy…

Windows11系统配置WSL2网络使它支持LAN访问

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、WSL2安装二、使用步骤1.NAT2.镜像 三、写在最后总结 前言 WSL2的出现感觉真的是一个惊喜&#xff0c;又想玩Linux&#xff0c;又怕日用搞不了的最佳替代方…

深度学习入门到放弃系列 - 阿里云人工智能平台PAI部署开源大模型chatglm3

通过深度学习入门到放弃系列 - 魔搭社区完成开源大模型部署调用 &#xff0c;大概掌握了开源模型的部署调用&#xff0c;但是魔搭社区有一个弊端&#xff0c;关闭实例后数据基本上就丢了&#xff0c;本地的电脑无法满足大模型的配置&#xff0c;就需要去租用一些高性价比的GPU机…

优选算法——双指针2

题目一——有效三角形的个数 思路 先审题 举个例子&#xff0c;下面一个序列可分成4个三元组 然后我们论证哪个可以组成三角形即可 判断三个数能不能组成三角形&#xff1a;任意两边之和大于第三边 注意第一个和第四个&#xff0c;有人说&#xff0c;这不是两个相同的吗&#…