Redis的持久化方法,各自优缺点,怎么选择?

持久化:

redis基于内存是数据库,内容存到内存中,也可以存到硬盘中,这个过程就叫持久化。有两种方案,RDB和AOP两种。

RDB

RDB持久化就是把当前进程数据生成快照保存到硬盘的过程RDB文件是⼀个压缩的二进制文件,通过它可以还原某个时刻数据库的状态。由于R DB文件是保存在硬盘上的,所以即使Redis崩溃或者退出,只要RDB文件存在,就可以用它来恢复还原数据库的状态。

持久化触发方式

触发RDB持久化过程分为手动触发和自动触发。

手动触发:

分别对应save和bgsave命令:

  • save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间 阻塞,线上环境不建议使用。
  • bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。主进程不进行任何IO操作,确保了极高的性能,阻塞只发生在fork阶段,一般时间很短。
自动触发:

以下场景会自动触发RDB持久化:

  • 使用save相关配置,如“ save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点
  • 执行debug reload命令重新加载Redis时,也会自动触发save操作
  • 默认情况下行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。
Fork

Fork的作用是复制一个与当前进程一样的子进程,新进程所有的数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。它用写时复制技术,即现将数据写入到一个临时文件中,待持久化过程结束了,再用这个临时文件替换持久化好的文件。

 一般情况下父进程和子进程会公用一段物理内存,只有进程空间的各段内容要发生变化时,才将父进程的内容复制一份给子进程。

bgsave流程图:

RDB优缺点

优点

1 . 只有⼀个紧凑的⼆进制文件dump.rdb,非常适合备份、全量复制的场景。

2 . 容灾性好,可以把RDB文件拷贝到远程机器或者文件系统中,用于容灾恢复。

3 . 恢复速度快,RDB恢复数据的速度远远快于AOF的方式

缺点

1、实时性低,RDB是间隔⼀段时间进行持久化,没法做到实时持久化/秒级持久化。如果在这⼀间 隔事件发生故障,数据会丢失(会丢失最后一次快照的所有修改)。

2、存在兼容问题,Redis演进过程存在多个格式的RDB版本,存在老版本Redis无法兼容新版本R DB的问题。

3、Fork的时候,内存中的数据被克隆了一份,大致两倍的膨胀量需要考虑。数据量庞大时消耗性能。

AOF

AOF持久化:以独立日志的方式记录每次写命令(读操作不记录),redis重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。

AOF同步频率设置

appendfsync always

始终同步,每次Redis的写入都会立刻记入日志,性能较差但是数据完整性较好。

appendfsync everysec

每秒同步,每秒记入一次日志,如果宕机,本秒的数据会丢失。

appendfsync no

redis不主动进行同步,把同步时机交给操作系统。

工作流程

AOF的工作流程操作:命令写入 (append)、文件同步(sync)、文件重写(rewrite)、重启加载(load)

流程图:

流程如下:

1)所有的写入命令会追加到aof _ buf(缓冲区)中。

2)AOF缓冲区根据对应的策略向硬盘做同步操作。

3)随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。

4)当Redis服务器重启时,可以加载AOF文件进行数据恢复。

AOF优缺点

优点

1 . 实时性好,aof 持久化可以配置 appendfsync 属性,有 always ,每进行⼀次命令操作就记录 到 aof 文件中⼀次。

2 . 通过 append 模式写文件,即使中途服务器宕机,可以通过 redis- check - aof 工具解决数据⼀致性问题。

缺点

1、AOF文件比RDB文件大,且恢复速度慢。

2 . 数据集大的时候,比RDB启动效率低。

RDB与AOF如何选择?

  • ⼀般来说, 如果想达到足以媲美数据库的数据安全性,应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入 AOF文件来恢复原始的数据,因为在通常情况下 AOF文件保存的数据集要比RDB文件保存的数据集要完整。
  • 如果可以接受数分钟以内的数据丢失,那么可以只使用RDB持久化。
  • 有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成 RDB 快照,非常便于进行数据备份, 并且 RDB恢复数据集的速度也要比AOF恢复的速度要快,除此之 外,使用RDB 还可以避免 AOF程序的bug。
  • 如果只需要数据在服务器运行的时候存在,也可以不使用任何持久化方式。

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

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

相关文章

VisualGLM-6B微调(V100)

Visualglm-6b-CSDN博客文章浏览阅读1.3k次。【官方教程】XrayGLM微调实践,(加强后的GPT-3.5)能力媲美4.0,无次数限制。_visualglm-6bhttps://blog.csdn.net/u012193416/article/details/131074962?ops_request_misc%257B%2522req…

使用Axios从前端上传文件并且下载后端返回的文件

前端代码: function uploadAndDownload(){showLoading();const fileInput document.querySelector(#uploadFile);const file fileInput.files[0];const formData new FormData()formData.append(file, file)return new Promise((resolve, reject) > {axios({…

【经典论文阅读1】FM模型——搜推算法里的瑞士军刀

全文由『说文科技』原创出品,文章同步更新于公众号『说文科技』。版权所有,翻版必究。 FM模型发表于2010年,它灵活好用且易部署。作者行文极其流畅,作者首先对要处理的问题进行介绍,接着作者提出FM模型,这…

Vue单页面应用和多页面应用的区别

概念: SPA单页面应用(SinglePage Web Application),指只有一个主页面的应用,一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换…

Grad-CAM(梯度加权类激活图)

Grad-CAM(Gradient-weighted Class Activation Mapping)是一种可视化技术,用于解释卷积神经网络(CNN)的决策过程。它通过生成类激活图(Class Activation Map,CAM)来突出显示对网络预…

笔试强训-day17_T2 十字爆破

一、题目链接 十字爆破 二、题目描述 牛牛在玩一个游戏: 一共有n行m列共nm个方格,每个方格中有一个整数。 牛牛选择一个方格,可以得到和这个方格同行、同列的所有数之和的得分。 例如:对于一个22的方格: 1 2 3 4 牛牛…

Python字符串常用方法(全网最细,仅此一份)

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 👉Python从入门到精通 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python180G全栈视频教程以及Python相关电子书合集 😊私信未回可以加V:hacker0327 备注P…

Nodejs-异步并发控制

异步并发控制 在 node 中可以利用异步发起并行调用。但是如果并发量过大,就会导致下层服务器吃不消。 bagpipe 解决方案 解决方案 通过一个队列来控制并发量如果当前活跃的异步调用小于限定值,从队列中取出执行如果活跃调用达到限定值,调…

文心一言 VS 讯飞星火 VS chatgpt (251)-- 算法导论18.2 4题

四、假设关键字 {1,2,…,n} 被插入一棵最小度数为 2 的空 B 树中,那么最终的B树有多少个结点?如果要写代码,请用go语言。 文心一言: B树(B-tree)是一种自平衡的树&…

对于Java和mysql的时间类型不一样而引发的问题应该怎么处理

在Java和MySQL中,时间类型有一些不同,可能会导致一些问题。一种常见的情况是Java中的时间类型与MySQL中的时间类型不匹配,例如Java中的java.sql.Timestamp和MySQL中的TIMESTAMP类型之间的差异。这种情况下,可以采取以下处理方法&a…

深入探索微信小程序:图像处理与优雅预览的艺术

深入探索微信小程序:图像处理与优雅预览的艺术 微信小程序中的图片基础一、图片上传与压缩二、图片预览技巧三、图片处理进阶:Canvas与滤镜四、性能优化与最佳实践参考资料 微信小程序中的图片基础 图片资源存储:本地资源与网络资源的使用区…

Linux系统下设置命令的别名

给常用Docker命令起别名,方便我们访问: 第一步:修改/root/.bashrc文件 vi /root/.bashrc第二版:添加别名 # .bashrc # User specific aliases and functionsalias rmrm -i alias cpcp -i alias mvmv -i alias dpsdocker ps --f…

sql数据库——增删改

1.插入 insert into <表><字段1&#xff0c;字段2&#xff0c;字段3> values<值1&#xff0c;值2&#xff0c;值3> 2.更新/修改 update <表名> set 修改字段1值1&#xff0c;修改字段2值2&#xff0c;修改字段3值3&#xff0c; 3.删除 delete …

商务分析方法与工具(一):Python的趣味快捷-运算符、表达式与内置对象

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

【Spring】6.深入解析分布式事务:CAP理论、一致性模型与容错机制

随着业务需求的日益复杂&#xff0c;分布式系统架构已成为构建可扩展、高可用服务的主流选择。然而&#xff0c;分布式系统带来了新的挑战&#xff0c;尤其是在事务处理方面。分布式事务需要在多个服务或数据库实例间保持数据的一致性和完整性&#xff0c;这在技术实现上具有很…

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

【C++并发编程】(二)线程的创建、分离和连接

文章目录 &#xff08;二&#xff09;线程的创建、分离和链接创建线程&#xff1a;示例线程的分离&#xff08;detach&#xff09;和连接&#xff08;join&#xff09;。 &#xff08;二&#xff09;线程的创建、分离和链接 创建线程&#xff1a;示例 线程&#xff08;Thread…

docker搭建redis集群三主三从

为什么需要做分布式redis 水平扩展&#xff1a; 随着业务的发展&#xff0c;单机Redis可能无法满足日益增长的数据存储和访问需求。分布式Redis可以通过将数据分散到多个节点上来实现水平扩展&#xff0c;提高存储容量和处理能力。高可用性&#xff1a; 单点故障是任何系统的一…

C++关联容器2——关联容器特有操作

关联容器操作 除了http://t.csdnimg.cn/osoJZ 中列出的类型&#xff0c;关联容器还定义了下表中列出的类型。这些类型表示容器关键字和值的类型。 关联容器额外的类型别名 key_type此容器类型的关键字类型mapped_type每个关键字关联的类型&#xff1b;只适用于mapvalue_type对…

macOS asdf 工具版本管理器

一、区别于Homebrew "asdf"和"Homebrew"都是用于管理软件包的工具&#xff0c;但它们的主要区别在于适用范围和管理的内容&#xff1a; 1.适用范围&#xff1a; asdf&#xff1a;是一个通用的版本管理工具&#xff0c;可以用来管理多种不同的软件工具和…