Redis数据持久化

Redis数据持久化

redis一共提供了两种数据持久化的方式RDB和AOF。

RDB

​ RDB全称为Redis Database Backup file(数据备份文件),也被叫做Redis数据快照。简单来说就是将内存中的全部数据都记录到磁盘中,当redis发生宕机或是一些故障导致实例故障重启,此时就会从磁盘中读取快照文件,恢复数据。

快照持久化是 Redis 默认采用的持久化方式,在 redis.conf 配置文件中默认有此下配置:

在这里插入图片描述

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

save 900 1           #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发bgsave命令创建快照。
save 300 10          #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发bgsave命令创建快照。
save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发bgsave命令创建快照。

RDB的执行原理

bgsave会fork主进程得到子进程(主要复制的是主线程中的页表:记录着虚拟地址与物理地址的映射关系)子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件。

其中fork采用的是copy on write技术:

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会 拷贝一份数据进行写操作。
    在这里插入图片描述

AOF

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

aof默认是关闭的,需要更改redis.conf文件来进行配置。
在这里插入图片描述

aof记录频率也可以通过redis.conf进行配置。

在这里插入图片描述

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

因为aof是记录命令。aop文件要比rdb大的多,而且aof会对记录中的一个key进行多测更改操作,但是只有最后一次的更改才有意义。可以通过bgrewriteaof命令对aof文件进行重写,使其用最少的命令达到最优的效果。

在这里插入图片描述

Redis也可以在redis.conf中进行自动配置,当aop中的据在某段时间达到某个阈值就会自动进行重写。
在这里插入图片描述

RDB和AOf对比

他们在实际应用中各有其优缺点,在Redis6.0之后两个配合使用。

RDBAOF
持久化方式定时对整个内存进行快照记录每一次的执行命令
数据完整性不完整,在定时快照期间数据会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件相对较小记录命令所以文件很大
宕机恢复速度
数据恢复优先级低,因为完整度不比AOF高,完整度高
系统资源占用高,其中fork等操作对内存和CPU会有一定的消耗低,主要是硬盘的io操作,进行命令重写时会占用CPU资源
使用场景可以容忍数分钟的数据丢失情况(偏向于高可用性)对数据安全性要求较高的情况(对数据一致性要求高)

总结

RDB和AOF两种数据持久化操作的区别有哪些?

​ rdb时一个快照文件,它是将redis的数据都存储在硬盘中,当redis故障宕机后,方便从快照文件中恢复数据。

​ aof时一个追加文件(类似于一个日志文件),他是用来记录对数据的写命令操作,当redis宕机时,会重修执行一遍这个文件,从而恢复数据。

这两种持久化操作哪个的恢复速度比较快呢?

​ 引文RDB是一个二进制文件,在保存的时候体积比较小,所以他若是用它进行数据恢复,数据恢复速度很快,但是他数据的完整性不高,在快照期间会数据丢失。AOF虽然恢复的速度相较于RDB慢,但是由于它可以配置刷盘策略,从而他的数据完整性较高。

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

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

相关文章

VSCode种git rebase分支冲突解决无法继续rebase

情景: 常规来说我们git开分支开发完新功能之后,提交之前rebase dev分支,然后合并到dev上算是开发完成。 问题还原: 在开发完之后执行如下指令: 1.执行变基操作:git rebase dev。 //这一步出现冲突vscode上…

微信小程序基于Promise封装发起网络请求

1.创建一个request.js // 相当于域名 const baseURL ***************; // 暴露一个request函数 export function request(parms) {// 路径拼接const url baseURL parms.url;// 请求体,默认为{}const data parms.data || {};// 请求方式,默认为GETco…

HTTPS详解

1 概述 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实,HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。 2 HTTPS请求过程 HTTPS的整体过程分为…

【FAQ】API6低代码开发问题汇总

参考文档: 低代码开发参考文档: 文档中心:使用低代码进行开发 基于景区模板开发元服务: 文档中心:模板简介 使用API6低代码开发遇到的问题汇总情况如下: 1、低代码环境下,如何实现box-shadow阴影效果的配置&#…

Angular 调试工具(Augury)

目录 1、简介 2、检验代码 3、Angury 本地构建和安装 3.1 添加到Chrome 浏览器: 3.2 添加到Firefox浏览器 4、项目中对应的Npm脚本 5、Augury 三大主要功能 5.1 组件树(Component Tree) 5.1.1 Component Tree 5.2 路由树&#xff0…

带记忆的Transformer模块

MEMORIZING TRANSFORMERS 返回论文和资料目录 论文地址 1.导读 谷歌去年做的一个工作。内容很简单,在Transformer模块中加入了一层记忆层,结果表明这个方法可以帮助模型提高在NLP任务上的表现:generic webtext (C4), math papers (arXiv),…

Generative Adversarial Network

Goodfellow,2014年 文献阅读笔记--GAN--Generative Adversarial NetworkGAN的原始论文-组会讲解_gan英文论文_Flying Warrior的博客-CSDN博客 启发:如何看两个数据是否来自同一个分布? 在统计中,two sample test。训练一个二分类的分类器,如果能分开这两个数据,说明来自…

数据库复习

select 查询 字段别名用 as (可以为中文) 例如 select distinct 关键字 去重复值 例如select distinct deptno from test where 条件过滤 and or 和 not运算符 and同时成立 or有一个成立就可以了 优先级and>or>not不符合(!) in 匹配多个值 selec…

Windows上查看服务器上tensorboad内容

文章目录 前言一、SSH的设置二、tensorboard命令 前言 本篇文章是针对于局域网内的服务器的tensorboard可视化,由于设置方式稍微有点复杂,导致我每次隔了一段时间之后,就不知道该怎么查看tensorboard了,每次都要百度搜一大堆资料…

SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

在SpringCloud系列(十五)[分布式搜索引擎篇] - 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解, 并且已经将一些数据进行了存储, 但是这并不是我们学习 ElasticSearch 的目的, ElasticSearch 最擅长的…

物业管理微信小程序的设计与开发

1.物业管理微信小程序实现的功能 该微信小程序包含小程序端,后台管理端以及后端。 小程序端提供给业主使用,实现的功能模块有公告通知、访客预约、车位申请、装修申请、一键报修、报修单、意见反馈、缴费通知、一键求助、个人信息管理; 后台…

arcgis建筑物平均高度

主要用到相交和属性表的汇总功能。 路网 建筑物栋 相交结果 右键,bh列汇总 原始块有392,这里只有389,说明有的地块没有建筑,所以应该将表连接到原始街区上检查是否合理,以及随机验证一个结果是否正确。 连接结果&…

Spring6.0 源码部署

环境依赖 Git JDK17 Gradle(版本号需要和Spring源码中的版本一致) 源码下载 官网地址 源码配置修改 maven { url "https://maven.aliyun.com/repository/central" }gradle-wrapper.properties #distributionUrlhttps\://services.gradle…

无虚拟 DOM 版 Vue 进行到哪一步了?

前言 就在一年前的 Vue Conf 2022,尤雨溪向大家分享了一个非常令人期待的新模式:无虚拟 DOM 模式! 我看了回放之后非常兴奋,感觉这是个非常牛逼的新 feature,鉴于可能会有部分人还不知道或者还没听过什么是 Vue 无虚…

Excel-公式VLOOKUP 使用方法-小记

个人愚见 表示 MongoDB列中的任意一条数据 在 MySQL列 精确查找 和MongoDB列 中一模一样的数据,有的话返回MongoDB列数据,没有话返回#N/A 官方解释

【Web安全】小白怎么快速挖到第一个漏洞,src漏洞挖掘经验分享,绝对干货!

src漏洞挖掘经验分享 – 掌控安全以恒 一、公益src 公益src是一个白帽子提交随机发现的漏洞的品台,我们可以把我们随机发现或者是主动寻找到的漏洞在漏洞盒子进行提交。 在挖掘src的时候不能越红线,一般情况下遇到SQL注入 只获取数据库名字以证明漏洞的…

myAgv的slam算法学习以及动态避障下篇

引言 在之前的一篇文章中有提到购入了一台myAGV,以树莓派4B为控制核心的移动机器人。上篇文章中向大家介绍了myAGV如何实现建图、导航以及静态避障,但我们深知,这只是机器人自主导航能力的基础。在实际应用场景中,机器人需要面对复…

【C语言+sqlite3 API接口】实现水果超市

实验内容: 假如我家开了个水果超市,有以下水果,想实现自动化管理,扫描二维码就能知道当前的水果状态,进货几天了, 好久需要再次进货,那些水果畅销,那些水果不畅销,那些水…

selenium查找svg元素

目录 如何为SVG元素编写XPath 使用local-name()的语法 需要记住的一点 将“and”与SVG元素一起使用 如何定位嵌套的SVG元素? XPath是一种用于定位XML文档中的web元素的语言,包括构成网页的HTML文档。在Selenium中&#xff0…

【计算机视觉】DINOv2(视觉大模型)代码四个不同模型的对比,以 28 * 28 的图像为例(完整的源代码)

文章目录 一、ViT-S/14二、ViT-B/14三、ViT-L/14四、ViT-g/14 一、ViT-S/14 import torch import torchvision.transforms as T import matplotlib.pyplot as plt import numpy as np import matplotlib.image as mpimg from PIL import Image from sklearn.decomposition im…