Redis持久化:RDB、AOF

news2024/10/7 10:13:22

Redis持久化

  • 一. RDB
    • (1) save
    • (2) bgsave
    • (3) 总结
  • 二. AOF
    • (1) 重写优化
    • (2) RDB和AOF的区别

引入:Redis用内存存储数据,有数据丢失的问题;

一. RDB

RDB(Redis Database Bcakup file)即Redis数据备份文件,或Redis数据快照

即把内存中的所有数据 写入磁盘
当Redis实例故障重启后,从磁盘读取RDB快照文件,恢复数据;

(1) save

在这里插入图片描述

由于Redis是单线程的,当主进程来执行RDB,则会 阻塞 其他所有请求;
但是磁盘IO比较慢!当数据比较大则耗时久;

缺点:阻塞用户请求;
场景:关机前使用; 且Redis停机时会自动执行RDB!

停机时自动存储RDB,但是宕机则不会!

(2) bgsave

后台 异步 执行,让子进程去存储,主进程不受影响;
在这里插入图片描述
Rrdis内部触发bgsave机制
在这里插入图片描述
为什么不设置短一点?
如果触发bgsave的时间设置的太短如1s,那么执行频率就越高,而执行需要写入磁盘,如果数据量太大,则1s执行一次根本忙不过来;

fork创建子进程原理
bgsave开始会fork主进程得到子进程,子进程共享主进程的内存数据。完成后读取内存数据写入RDB文件;
在linux中,所有进程无法操作物理内存;而是由操作系统给每个进程分配虚拟内存;而后操作系统会维护一个页表(虚拟内存和物理内存的映射),虚拟内存基于页表去物理内存读取;
执行fork时会把页表做拷贝,即把映射关系拷贝给子进程,子进程获取后对虚拟内存进行操作,这样就无需拷贝内存中的数据而直接实现内存共享;这样速度就快;
而后子进程读取数据,将其写入磁盘;替换旧的RDB为新的RDB文件;
在这里插入图片描述

(3) 总结

基本流程:
1.fork主进程得到子进程,共享虚拟内存空间;
2.子进程读取内存数据写入新的RDB文件;
3.用新的RDB文件替换旧的RDB文件;

RDB什么时候执行?
1.默认关闭Redis时,是阻塞的;
2.bgsave;

RDB缺点:
1.一旦宕机就丢失,存在漏洞;
2.耗时长,所以bgsave触发的时间不能太短;

二. AOF

引入:由于RDB在持久化到磁盘时间隔比较长,使用AOF可以提高安全性;

AOF(Append Only File)即追加文件,本质就是把Redis接收到的写操作命令记录在AOF文件,可以看作是命令日志文件;
类似HDFS中的Edits;

在这里插入图片描述

当Redis出现故障,如何恢复?
只需要读取AOF文件;
把AOF中的命令再执行一次;

AOF开启:默认是关闭的,需要手动开启;
在这里插入图片描述

AOF记录的频率刷盘策略):
在这里插入图片描述
always:每当接收到命令则立即由主进程将数据写到内存,同时写入AOF(磁盘中),最安全,性能最差;
everysec:先将命令放入【缓冲区】,然后每隔1秒将缓冲区数据写入AOF中,(默认);
no:即主进程只处理内存数据,然后将命令写入【缓冲区】,而缓冲区的命令合适写入AOF由操作系统来决定,性能高,安全性差;

(1) 重写优化

为了解决AOF文件过大,以及对同一个key多次操作的问题,则有 bgreweiteaof命令可以对AOF中的命令重写优化,用最少的命令达到同样的效果:
在这里插入图片描述

触发重写的两个默认配置
在这里插入图片描述

(2) RDB和AOF的区别

1.原理:RDB是对整个内存做快照并存入磁盘,而AOF只是记录新的命令;
2.数据完整性:RDB备份时间间隔长,不安全,可能不完整;而AOF的默认刷盘策略是everysec,每秒将缓冲区的命令写入AOF文件,数据更完整更安全;
3.文件大小:AOF较大
4.宕机恢复速度:恢复时,RDB存的是数据,直接加载比较快;而AOF存的是命令,启动后需要执行命令;
5.恢复优先级:即同时启用时,优先使用AOF(数据更完整)
6.系统资源占用:RDB占用高,大量CPU和内存消耗;AOF占用资源低,主要是磁盘IO,但是重启时会执行命令,占用高(异步);
7.使用场景:容忍数分钟的数据丢失,追求更快的启动速度选择RDB;对安全性高则用AOF或者两种结合到一起使用;
在这里插入图片描述

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

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

相关文章

如何用 Python采集 <豆某yin片>并作词云图分析 ?

嗨害大家好鸭!我是小熊猫~ 总有那么一句银幕台词能打动人心 总有那么一幕名导名作念念不忘 不知道大家有多久没有放松一下了呢? 本次就来给大家采集一下某瓣电影并做词云分析 康康哪一部才是大家心中的经典呢? 最近又有哪一部可能会成为…

拉链表详解

目录 一、拉链表概念 二、拉链表对应的业务需求 三、代码实现 3.1 数据初始化: 3.2 创建ods层增量表: 3.3 创建dwd层拉链表 3.4 数据更新 ,将数据日期为2023-3-4的日期添加到拉链表中 3.4.1 先追加数据到ods层表 3.4.2 更新dwd层表数据 …

【SpringCloud】SpringCloud详解之Ribbon实战

目录前言SpringCloud Ribbon 负载均衡一需求二.RestTemplate远程调用配置负载均衡(order服务内修改)三.Ribbon实现负载均衡的原理四.Ribbon负载均衡策略1.负载均衡种类2.配置负载均衡(order服务中配置)五.Ribbon的饥饿加载配置(在order服务配置)前言 微服务中比如用户服务部署…

sklearn使用入门

文章目录1.机器学习1.1 机器学习简介1.2 有监督学习(supervised learning)1.3 无监督学习(unsupervised learning)1.4 半监督学习2. 机器学习工具SKlearn2.1 sklearn2.2 sklearn常用模块2.2.1 分类2.2.2 回归2.2.3 聚类2.2.4 降维2.2.5 模型选择2.2.6 数据预处理2.3 sklearn使用…

Android startActivityForResult()废弃了,代替方案案例

安卓项目compileSdk为32,在使用startActivityForResult()方法时发现Android studio提示此方法已经废弃了。 目前的代替方案案例。 // 确保 app 的 build.gradle中已经引入了androidx.appcompat:appcompat dependencies {implementation androidx.appcompat:appcomp…

操作系统之进程管理---每天一点点(春招加油呀)--知识点回顾(自问自答版本总结)

1.什么是进程?什么是线程?进程和线程的区别? 进程:资源分配和管理的基本单位 线程:程序执行的最小单位。 区别: 地址空间: 同一进程的所有线程共享本进程的地址空间,而不同的进程之间…

仓库拣货标签电子价格标签办公电子标牌

数字货架标签尺寸:2.13英寸、2.9英寸、4.2英寸、7.5英寸、10.2英寸技术:2.4G MHz无线通信技术,电子墨水显示。刷新20,000个标签/1小时/AP。3-5年的寿命,电池可以快速更换。ESL管理系统工作原理:实时显示最新…

【Maven】P3 依赖管理

依赖管理依赖配置依赖传送依赖具有传递性直接依赖与间接依赖依赖冲突可选依赖排除依赖依赖范围依赖配置 依赖指的是当前项目所需要的jar包&#xff0c;在 pom.xml 中可以看到 <!--设置当前项目所依赖的所有jar包--> <dependencies><!--设置一个具体的依赖jar-…

【CVPR2022】Class Re-Activation Maps for Weakly-Supervised Semantic Segmentation

论文标题&#xff1a;Class Re-Activation Maps for Weakly-Supervised Semantic Segmentation收录&#xff1a;CVPR 2022paper: https://arxiv.org/abs/2203.00962code: https://github.com/zhaozhengChen/ReCAM解读&#xff1a;https://zhuanlan.zhihu.com/p/478133151https:…

mx-font

Abstract 短镜头字体生成(FFG)方法必须满足两个目标:生成的图像既要保留目标字符的底层全局结构,又要呈现多样化的局部参考风格。现有的FFG方法旨在通过提取通用表示样式或提取多个组件样式表示来分离内容和样式。然而,以往的方法要么无法捕捉不同的本地风格,要么无法推广到…

初识系统移植

系统移植简单来说就是将准备好的内核&#xff08;OS&#xff09;移植到一台主机或者开发板中&#xff0c;类似于器官移植&#xff0c;将准备好的器官移植到人体中。 为什么需要系统移植&#xff1f; 没有内核的情况下&#xff0c;上层如果要控制硬件只能将C语言代码先编译成二…

【C++】栈和队列(stackqueue)介绍,实现,oj

&#x1f345;一文包教会&#xff0c;不再赘述栈最基本的结构和性质&#xff08;栈的基本介绍在这里&#xff09; &#xff08;队列基本介绍和实现&#xff09;,博主主页还有很多栈和队列oj题哦~ 目录 ☃️1.stack_list &#x1f41d;1.1 介绍 &#x1f41d;1.2 stack和list实…

人工智能|HCIA-AI V3.0(一)——人工智能概览

文章目录一 AI、机器学习、深度学习的关系二 AI的三个方面的应用2.1 计算机视觉2.2 语音处理2.3 自然语言处理三、争议四、未来展望一 AI、机器学习、深度学习的关系 人工智能:是研究、开发用于模拟、延伸和扩展人的智能的理论、方法及应用系统的一- 门新的技术科学。 机器学习…

【蓝桥杯集训15】求最短路存在负权边——spaf算法(3 / 4)

——SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称 单源最短路&#xff0c;且图中没有负环就可以用spfa 目录 spaf求最短路模板 852. spfa判断负环 341. 最优贸易 - spfa 双向建图 3305. 作物杂交 - spaf求最短路模板 只有当一个点的前驱结点更新了&#xff0c;…

多线程共享数据结构的无锁释放

目录背景问题共享结构的无锁释放对比ref-cntrcuepoch-based reclamhazard pointer: 冒险指针结构原理正确性保证范例参考背景 多线程共享一个数据结构。 共享数据结构&#xff0c;可以做到节约内存。 但是多线程共享&#xff0c;可能会有问题&#xff0c;比如同步的问题。 问…

(Android-RTC-9)PeerConnectionFactory

开篇前瞎扯。很久没发技术文章了&#xff0c;此文一直放着草稿箱没有完成&#xff0c;感觉自己在家庭和工作中找到了拖延的借口&#xff0c;开始慢慢变得懒惰了&#xff0c;那是万万不行的。恰逢2023开年ChatGPT的爆火&#xff0c;更让我这些普通程序员危机感瞬间飙升&#xff…

安全规约第一章

文章目录传统密码和现代密码的区别古典密码近代密码现代密码定义模型证明现代密码学CryptographyCryptanalysisCryptosystemScheme如何定义算法步骤第一步&#xff0c;搞清楚安全服务目标第二步&#xff0c;计算过程中需要几方的参与需要几个算法描述它算法命名谁来运行哪一个算…

03_Apache Pulsar的Local与分布式集群构建、Pulsar的分布式集群模式、Pulsar的分布式集群模式构建\启动\测试

1.3.Apache Pulsar的Local与分布式集群构建 1.3.1 Apache Pulsar的Local模式构建 1.3.1.1.Apache Pulsar的Local模式基本使用 1.3.2.Apache Pulsar的分布式集群模式 1.3.2.1.安装zookeeper集群 1.3.3.Apache Pulsar的分布式集群模式构建 1.3.4.Apache Pulsar的分布式集群模式启…

Sparx Systems Pro Cloud Server crack

Sparx Systems Pro Cloud Server crack 云服务器 添加了新的“OSLC会话超时”设置&#xff0c;以配置OSLC用户将注销的最长非活动时间。 改进了对重复SQL列名的处理。 FLS&#xff1a;为“组”添加了对其他Microsoft Active Directory名称格式的支持。 云配置客户端 在扩展服务…

香橙派5使用NPU加速yolov5的实时视频推理(二)

三、将best.onnx转为RKNN格式 这一步就需要我们进入到Ubuntu20.04系统中了&#xff0c;我的Ubuntu系统中已经下载好了anaconda&#xff0c;使用anaconda的好处就是可以方便的安装一些库&#xff0c;而且还可以利用conda来配置虚拟环境&#xff0c;做到环境与环境之间相互独立。…