Redis7 实现持久化的三种方式

news2024/11/15 23:30:24

1、概述

1.1、Redis持久化的重要性

  1. 数据恢复:Redis是一个内存数据库,如果系统或服务宕机,内存中的数据将会丢失。Redis的持久化机制可以把数据保存到磁盘上,以便在系统重启后恢复数据。这是Redis持久化最基本也是最重要的功能。
  2. 故障恢复:持久化机制可以帮助Redis在出现系统或数据崩溃时,安全地复原所有数据,避免可能出现的数据丢失。这对于维护企业级Web应用系统的稳定性和可用性至关重要。
  3. 保证数据一致性:通过定期持久化,可以确保即使在数据更新频繁的情况下,也能保持数据的一致性。这对于需要保证数据准确性的应用来说是非常重要的。
  4. 支持备份和恢复:持久化文件可以定期备份到其他存储设备,这样在遇到灾难性故障时,可以从备份中恢复数据,减少损失。

1.2、持久化对Redis性能的影响

在选择和使用Redis的持久化机制时,需要根据实际的应用场景和需求来权衡持久化和性能之间的关系。例如,可以通过调整持久化的频率、使用更快的磁盘、优化磁盘I/O等方式来减少持久化对Redis性能的影响。同时,也需要关注Redis的监控和调优,及时发现和解决性能问题。

  1. 写操作的延迟:由于持久化需要将数据写入磁盘,这会导致写操作有一定的延迟。特别是在使用AOF持久化时,每次写操作都需要追加到磁盘上的日志文件,这可能会增加写操作的延迟。
  2. CPU和内存资源的占用:在进行持久化操作时,Redis需要fork一个子进程来处理持久化任务。这个过程会消耗一定的CPU和内存资源,对Redis的性能有一定的影响。尤其是在大数据量的情况下,fork操作本身可能会消耗较多的系统资源。
  3. 磁盘I/O的影响:持久化需要将数据写入磁盘,这会受到磁盘I/O性能的影响。如果磁盘性能较差,或者磁盘I/O负载较高,那么持久化操作可能会成为Redis性能的瓶颈。
  4. 数据恢复的时间:在Redis重启时,需要加载持久化文件来恢复数据。这个过程可能会消耗一定的时间,导致Redis在启动时的性能下降。

1.3、Redis的三种持久化方式概述

Redis提供了三种持久化方式,分别是RDB(Redis DataBase)持久化、AOF(Append Only File)持久化和混合持久化。下面简要概述这三种方式的工作原理和特点:

  1. RDB持久化:RDB持久化生成的快照文件是一个紧凑压缩的二进制文件,占用空间较小,适用于备份和全量复制等场景。同时,由于快照文件是完整的数据备份,因此恢复速度较快。但是,RDB持久化可能存在数据丢失的风险,因为它只保存了某个时间点的数据快照,无法记录数据的变化过程。
  2. AOF持久化:AOF持久化可以记录数据的变化过程,因此即使出现宕机等故障,也只会丢失最后一次持久化之后的数据,保证了数据的可靠性。同时,AOF文件是以文本形式存储的,易于阅读和解析。但是,AOF持久化可能会产生较大的I/O开销,并且在数据恢复时可能需要较长的时间。
  3. 混合持久化:混合持久化结合了RDB和AOF两种持久化方式的优点,既保证了数据的可靠性,又提高了数据恢复的速度。但是,混合持久化可能会增加持久化文件的复杂性和管理难度。

2、RDB持久化

RDB持久化是通过生成数据快照(Snapshot)的方式,将当前Redis进程的数据持久化到磁盘上。触发RDB持久化的方式可以是手动触发(如使用SAVE或BGSAVE命令),也可以是自动触发(如根据配置文件中指定的时间间隔和键值对数量进行触发)。

RDB持久化的方式:定时持久化(Save)、触发持久化(Save、Bgsave)。

2.1、RDB持久化的优缺点

(1)优点:

  • 数据紧凑:RDB生成的数据快照是一个紧凑的二进制文件,占用空间较小,这对于存储和传输都非常有利。
  • 恢复速度快:由于RDB文件是完整的数据备份,因此在恢复数据时,只需要加载RDB文件即可,恢复速度较快。
  • 适合备份:RDB文件非常适合用于进行备份和灾难恢复,特别是在数据量大且对恢复时间要求较高的场景下。

(2)缺点:

  • 数据丢失风险:RDB持久化只能保存某个时间点的数据快照,如果Redis进程在两次快照之间宕机,那么这期间的数据变更将会丢失。因此,RDB持久化可能无法满足对数据完整性要求较高的应用。
  • fork操作开销大:在生成RDB快照时,Redis需要fork一个子进程来进行持久化操作。这个fork操作可能会消耗较多的CPU和内存资源,对Redis的性能有一定的影响。特别是在大数据量的情况下,fork操作可能会成为性能瓶颈。
  • 版本兼容性问题:由于RDB文件使用特定二进制格式保存,因此在Redis版本更新过程中,可能存在老版本Redis服务无法兼容新版RDB格式的问题,导致数据无法正确恢复。

2.2、实现方式

(1)自动触发
修改Redis配置文件。

SAVE seconds changes
// 在seconds秒内触发了changes次写操作,就自动触发持久化

(2)手动触发
在客服端命令行中直接敲命令,redis服务器重启后失效。

SAVE // 在Redis主进程中进行数据持久化,会阻塞Redis服务器。
BGSAVE // 开辟一个Redis服务(fork)进行同步,不会造成Redis主服务器阻塞。

2.3、总结

  1. RDB持久化模式是全量持久化方式,在N秒后并且满足K条写操作,就会将这个时间段内的所有数据持久化到磁盘中的dump.rdb文件中。
  2. 尽量不要吧备份文档(dump.rdb)和Redis服务器放在同一台机器上,以防止物理机损坏后备份文件也损坏。

3、AOF持久化

AOF持久化是通过记录Redis服务器接收到的所有写操作命令,并以文本的形式追加到磁盘上的AOF文件中。当Redis重启时,会通过重新执行AOF文件中的命令来恢复数据。

在这里插入图片描述

  • Redis默认是没有开启AOF持久化的,需要在配置文件中配置:appendonly,改为yes重启服务就可以了。
  • AOF文件有一个膨胀合并的操作,当AOF文件的大小达到阈值的时候就会进行命令压缩,也就是AOF重写
  • AOF缓存区会根据写回策略将缓存区中的命令写回磁盘AOF文件中。

3.1、AOF持久化的优缺点

(1)优点:

  • 更高的数据安全性:AOF持久化可以记录Redis服务器接收到的所有写操作命令,因此即使Redis进程意外宕机,也只会丢失最后一次持久化之后的数据,从而保证了数据的可靠性。
  • 易于数据恢复:由于AOF文件以文本形式存储了所有的写操作命令,因此在数据恢复时,只需要重新执行这些命令即可,恢复过程相对简单。
  • 对Redis性能影响较小:AOF持久化在进行写操作时,只是简单地将命令追加到AOF文件中,而不会像RDB持久化那样需要fork子进程进行数据快照的生成,因此对Redis性能的影响较小。

(2)缺点:

  • 文件体积较大:由于AOF文件记录了所有的写操作命令,因此随着时间的推移,AOF文件的体积可能会变得非常大,这可能会占用大量的磁盘空间。
  • 恢复速度较慢:在Redis重启进行数据恢复时,需要逐行执行AOF文件中的命令,这可能会导致恢复速度较慢,特别是在AOF文件体积较大的情况下。
  • 可能存在数据不一致的风险:如果AOF文件在写入过程中发生错误或者损坏,可能会导致数据恢复时出现不一致的情况。此外,如果AOF文件的同步策略配置不当,也可能会导致数据丢失。

3.2、实现方式

在 Redis 中 AOF 持久化功能默认是不开启的,需要我们修改 redis.conf 配置文件中的以下参数:

appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"

3.3、写回策略

写回策略需要修改配置文件中的appendfsync指令。

appendfsync everysec  // 默认
  1. always:同步写回,每个命令执行完毕后立刻同步回磁盘。这种策略可以确保数据的完整性和安全性,因为即使Redis进程意外宕机,也不会丢失任何数据。但是,由于每次写操作都需要同步写回磁盘,会对Redis的性能产生一定的影响,特别是在高并发场景下。
  2. everysec:默认值,每隔一秒将缓存区中的命令写入磁盘AOF文件中。可以在一定程度上平衡数据的安全性和性能。但是,如果Redis进程在某一秒内意外宕机,那么这一秒内的数据将会丢失。
  3. no:由操作系统决定什么时候同步到磁盘中,这种策略可以最大化地提高Redis的性能,因为写回操作完全由操作系统控制,不会受到Redis进程的影响。但是,这也意味着数据的安全性完全依赖于操作系统的写回策略,如果操作系统出现故障或者宕机,可能会导致数据丢失。

3.4、AOF重写机制

当AOF文件的大小超过所设置的阈值后,redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。
可以在redis.conf文件中查看阈值:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

或者手动使用命令来执行重写机制:bgrewriteaof

4、混合持久化

混合持久化是Redis 4.0之后新增的一种方式,结合了RDB和AOF的优点。在写入时,先将当前的数据以RDB的形式写入文件的开头,再将后续的操作命令以AOF的格式存入文件。这样既能保证Redis重启时的速度,又能降低数据丢失的风险。

在同时开启RDB和AOF时,Redis重启的时候只会加载AOF文件,而不会加载RDB文件,AOF文件的优先级比RDB文件的优先级高,只有AOF文件不存在的时候才会读取RDB文件。

在这里插入图片描述

  1. RDB做全量持久化。
  2. AOF做增量持久化。

4.1、混合模式的优缺点

(1)优点:

  • 结合了RDB和AOF的优点:混合持久化结合了RDB持久化的数据紧凑性和AOF持久化的数据安全性,既保证了数据的可靠性,又提高了数据恢复的速度。
  • 降低了数据丢失的风险:由于混合持久化结合了AOF持久化,因此即使Redis进程在RDB快照生成之后宕机,也可以通过AOF文件来恢复数据,降低了数据丢失的风险。
  • 提高了重启速度:混合持久化在AOF文件的前半部分包含了RDB格式的全量数据,这使得Redis在重启时可以先加载RDB快照,快速恢复到宕机前的状态,然后再通过AOF文件中的增量命令来恢复后续的数据变更,从而提高了重启速度

(2)缺点:

  • AOF文件可读性变差:由于混合持久化在AOF文件的前半部分添加了RDB格式的全量数据,这使得AOF文件的可读性变差,不易于阅读和解析。
  • 版本兼容性问题:混合持久化是Redis 4.0之后引入的新特性,因此在使用混合持久化时,需要确保Redis的版本支持混合持久化。如果Redis版本过低,可能无法正确加载混合持久化生成的AOF文件。
  • 可能增加持久化文件的复杂性:混合持久化生成的AOF文件既包含了RDB格式的全量数据,又包含了AOF格式的增量命令,这使得AOF文件的结构和内容变得更加复杂。在管理和维护时可能需要更多的注意和操作。

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

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

相关文章

基于阿里云OSS上传图片实战案例

一、案例描述 基于Springboot框架实现一个上传图片到阿里云服务端保存的小案例。 二、准备工作 基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)-CSDN博客 三、代码 新建这两个类:一个…

MySQL:开始深入其数据(四)select子查询

select眼熟吧?(都三节了) 又开始学习了 在 MySQL 中,子查询(subquery)是指在一个查询内嵌套另一个完整的 SELECT 语句。子查询可以嵌套在 SELECT、INSERT、UPDATE、DELETE 语句中,用于从内部查询结果中获取数据,进而完…

新加坡大带宽服务器概览

随着全球互联网的迅猛发展,服务器作为支撑网络应用的重要基础设施,扮演着越来越重要的角色。新加坡,作为亚洲四小龙之一,其服务器市场也备受关注。特别是新加坡的大带宽服务器,更是受到了众多企业和个人的青睐。那么&a…

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水…

SNAP:如何批量预处理Sentinel2 L2A数据集并输出为TIFF文件?

我的需求 我目前就是希望下载哨兵2号数据,然后在SNAP中进行批量提取真彩色波段并输出为TIFF文件。 数据集下载说明 目前哨兵网站似乎进行了一大波更新,连网站都换了,网址如下: https://dataspace.copernicus.eu/ 打开后界面如…

Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

C++进阶(三) 二叉搜索树

一、二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节…

【论文】A Survey of Monte Carlo Tree Search Methods阅读笔记

本文主要是将有关蒙特卡洛树搜索的文献(2011年之前)进行归纳,概述了核心算法的推导,给出了已经提出的许多变化和改进的一些结构,并总结了MCTS方法已经应用于的博弈和其他领域的结果。 蒙特卡洛树搜索是一种通过在决策…

Java 石头剪刀布小游戏

一、任务 编写一个剪刀石头布游戏的程序。程序启动后会随机生成1~3的随机数,分别代表剪刀、石头和布,玩家通过键盘输入剪刀、石头和布与电脑进行5轮的游戏,赢的次数多的一方为赢家。若五局皆为平局,则最终结果判为平局。 二、实…

深入理解与应用工厂方法模式

文章目录 一、模式概述**二、适用场景****三、模式原理与实现****四、采用工厂方法模式的原因****五、优缺点分析****六、与抽象工厂模式的比较**总结 一、模式概述 ​ 工厂方法模式是一种经典的设计模式,它遵循面向对象的设计原则,特别是“开闭原则”&…

一文扫盲:室内导航系统的应用场景和技术实现(入门级)

hello,我是贝格前端工场,之间搞过一些室内导航项目,有2D也有3D的,算是有些经验,这里给大家分享一下室内导航的基本尝试,欢迎老铁们点赞、关注,如有需求可以私信我们。 一、室内导航是什么 室内…

vs报错1168链接错误——关于:LNK1168 无法打开 E:\VS\文件名\x64\Debug\文件名. 进行写入问题的解决方法

关于这个问题我在网上找了一些方法。 有些方法解决了这个问题, 但是有点麻烦, 有些方法可能不能解决问题。 这里我先把我在网上找到的方法写出来: 第一种方法是可能开着一个程序,就是这个终端。有的时候报错1168是因为你没有关这…

Vue中如何实现动态路由?

在前端开发中,Vue.js 是一个极为流行的 JavaScript 框架,提供了灵活性和易用性,使得开发者可以快速构建单页面应用(SPA)。在 Vue 中,我们经常需要处理动态路由的情况,比如根据用户的操作或者权限…

设计模式 (四) -简单工厂模式

请直接看原文:设计模式(四)简单工厂模式 | BATcoder - 刘望舒 (liuwangshu.cn) --------------------------------------------------------------------------------------------------------------------------- 1.简单工厂模式简介 定义 简单工厂…

chrome选项页面options page配置

options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,可以看到有的Google Chrome扩展程序有“选项Options”链接,如下图所示。单击“选项Options”…

Go-知识struct

Go-知识struct 1. struct 的定义1.1 定义字段1.2 定义方法 2. struct的复用3. 方法受体4. 字段标签4.1 Tag是Struct的一部分4.2 Tag 的约定4.3 Tag 的获取 githupio地址:https://a18792721831.github.io/ 1. struct 的定义 Go 语言的struct与Java中的class类似&am…

简单的input框输入竟然异常卡顿,一个日常性能问题的排查思路

我们公司产品主要提供企业项目管理服务,那么自然有配套的desk工单管理系统,用于搜集客户bug以及相关问题反馈。有一天我在测试功能时碰巧发现了一个bug,所以就想着提一个工单记录下方便日后修复。但就在创建工单填写标题时我发现标题输入卡爆…

2. vue 工程创建

1. 基于 vite创建 官方文档: https://v3.cn.vuejs.org/guide/installation.html#vite vite官网: https://vitejs.cn 使用vite创建的优势: 开发环境中,无需打包操作,可快速的冷启动。轻量快速的热重载(HMR)。真正的按需编译,不再…

深度学习-Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 损失函数 图片分类数据集 1 softmax2 损失函数1均方L1LossHuber Loss 3 图像分类数据集4 softmax回归的从零开始实现 1 softmax Softmax是一个常用于机器学习和深度学习中的激活函数。它通常用于多分类问题,将一个实数向量转换为概率分布。Softmax函…

如何提取图片中某个位置颜色的RGB值,RGB十进制值与十六进制的转换

打开本地的画图工具,把图片复制或截图粘进去,用颜色提取器点对应的位置就可以提取了。 获取到的 RGB 值为 (66,133,244) 转化后的值为 #4285F4。 【内容拓展一】:RGB 十进制值与十六进制的转换 当我们从 RGB 十进制值转换为十六进制值时&a…