Redis系列--redis持久化

news2024/11/27 9:53:42

一、为什么需要持久化

redis本身运行时数据保存在内存中,如果不进行持久化,那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然,redis本身默认采用了一种持久化方式,即RDB (Redis DataBase),可以在redis的目录中找到dump.rdb文件,这就是使用RDB方式做持久化后生成的数据文件。

二、常见的两种持久化方式

一、RDB(Redis Database)快照

1、是什么:即redis数据库,rdb持久性以指定的时间间隔执行数据集的时间点快照。

 2、作用:

在指定的时间间隔内将内存中的数据集快照写入磁盘。也就是Snapshot内存快照。等redis回复时再将硬盘快照文件直接读回到内存里。保存备份时执行的是全量快照,把内存中的所有数据都保存到dump.rdb文件

3、持久化触发类型:

自动触发:

手动触发:

Redis提供了两个命令来手动生成RDB文件

save:在主进程中执行会阻塞当前redis服务器,直到持久化工作完成,在执行save命令期间,redis不能处理其他命令,线上禁止使用。

bgsave:redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。

注意:生产上只允许用bgsave,不允许用save

lastsave:获取最后一次成功执行快照的时间,获取到的是时间戳,在Linux中可以使用date -d @时间戳进行时间的转换

4、如何恢复

将备份文件移动到redis安装目录并启动服务即可。

注意:1、执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,没有任何意义。2、物理恢复,服务和备份分机隔离。以防止生产机物理损坏后备份文件也挂了。

5、优劣势

优点:官网

1、适合大规模数据恢复

2、按照业务定时备份

3、对数据完整性和一致性要求不高

4、RDB文件在内存中的加载速度要比AOF快得多

缺点:官网

 1、在一定间隔时间做一次备份,如果redis意外宕机了,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失。

2、内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能

3、RDB依赖于主进程的fork,在更大的数据集中,这可能导致服务请求的瞬间延迟。fork的时候内存数据被克隆了一份,大致两倍的膨胀,需要慎重考虑。

6、使用redis -check -rdb 对损坏的rdb文件进行修复

7、RDB的触发

1、配置文件中默认的快照配置,即多少时间内进行了多少次redis数据的操作触发rdb持久化机制

2、手动save/bgsave命令

3、执行flashall/flashdb命令也会产生dump.rdb文件,但里面是空的,无意义。

4、执行shutdown且没有设置开启aof持久化

5、主从复制时,主节点自动触发

8、禁用rdb

1、redis-cli config set save "":动态的所有停止rdb保存规则

2、配置文件上禁用

二、AOF(Append Only File)

一、是什么

 二、能干什么

主要是记录每次redis的除读取操作外的所有操作指令,AOF保存的是appendonly.aof文件

三、AOF持久化工作流程

四、AOF缓冲区三种写回策略 

1、Always:同步写回,每个写命令执行完立刻同步地将日志写回磁盘。

2、everysec(默认写回策略):每秒写回,每个写命令执行完,只是先把日志写到aof文件的内存缓冲区,每隔1秒把缓冲区中的内容写入到磁盘文件。

3、no:操作系统控制的写回。每个命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

五、redis7 Multi Part AOF 的设计 

redis7之前AOF文件有且只有一个 ,redis7之后有三个文件:base基本文件、incr增量文件、manifest清单文件,且有一个配置目录用于和rdb区分

六、AOF异常文件修复

七、优劣势 

优势: 

劣势:

1、对于相同数据集的数据而言AOF文件要大于RDB文件,且恢复速度要慢于RDB

2、AOF运行效率慢于RDB,每秒同步策略效率较好,不同步效率和RDB相同

八、AOF重写机制 

 1、是什么

 启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集

2、两种触发机制 

自动触发:

手动触发: 直接发送bgrewriteaof命令 

重写原理:

自Redis 7.0.0以来,当安排AOF重写时,Redis父进程会打开一个新的增量AOF文件以继续写入。子进程执行重写逻辑并生成新的基本AOF。Redis将使用一个临时清单文件来跟踪新生成的基本文件和增量文件。当它们准备好后,Redis将执行原子替换操作,使这个临时清单文件生效。为了避免在AOF重写重复失败和重试的情况下创建许多增量文件的问题,Redis引入了AOF重写限制机制,以确保失败的AOF重写以越来越慢的速度重试。 

Redis会fork一个子进程,所以现在我们有了一个子进程和一个父进程。

子级开始在临时文件中写入新的基本AOF。

父级打开一个新的增量AOF文件以继续写入更新。如果重写失败,旧的基本文件和增量文件(如果有的话)加上这个新打开的增量文件代表了完整的更新数据集,所以我们是安全的。

当子级完成重写基本文件时,父级会得到一个信号,并使用新打开的增量文件和子级生成的基本文件来构建临时清单,并将其持久化。

利润现在Redis对清单文件进行原子交换,以便AOF重写的结果生效。Redis还会清理旧的基本文件和任何未使用的增量文件。

总结:

 

 三、AOF+RDB混合使用

一、同时开启两种持久化方式

reds默认是开启RDB持久化,而不会开启AOF持久化方式,如果两者同时开启,redis优先加载AOF持久化。

 二、redis加载顺序

当redis重启的时候会优先加载AOF文件来恢复原始的数据,因为通常情况下AOF文件保存的数据集要比RDB文件保存的数据集更完整。RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。由于RDB更适合用于备份数据库(AOF在不断变化不好备份),留着RDB作为一个兜底策略。

 

 

四、纯缓存模式

redis并不做持久化,只用做高速缓存,禁用持久化机制可以提高性能。

1、关闭RDB:save "";禁用RDB自动触发模式,手动触发还是可以的

2、关闭AOF:appendonly no;禁用AOF写回策略,手动触发还是可以的。

 

 

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

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

相关文章

11.Kafka系列之Stream实践

Kafka Streams是一个基于Apache Kafka的处理库,可以用于实现高效、可扩展的实时数据处理应用程序。它是一个轻量级的库,允许你在Java和Scala中创建和运行流处理应用程序,这些应用程序可以读取输入流,执行各种数据转换,…

MyBatis的配置案例

Mybatis中Map的使用 如果需要所有的代码&#xff0c;可以看我上一篇 在接口中定义 int addUser1(Map<String,Object> map); 插入语句 <insert id"addUser1">insert into user(id,name,pwd) values (#{userid},#{username},#{userPwd})</insert> …

Vue3-黑马(十)

目录&#xff1a; &#xff08;1&#xff09;vue3-antdv-全局提示与校验 &#xff08;2&#xff09;vue3-进阶-router-入门 &#xff08;3&#xff09;vue3-进阶-router-动态导入-嵌套路由-重定向 &#xff08;1&#xff09;vue3-antdv-全局提示与校验 当用户新增修改&…

redis(11)

一)基于Set集合实现点赞功能: 在我们的博客表当中&#xff0c;每一篇博客信息都有一个like字段&#xff0c;表示点赞的数量 需求: 1)同一个用户只能点赞一次&#xff0c;再次进行点赞则会被取消&#xff1b; 2)如果当前用户已经点赞过了&#xff0c;那么点赞按钮高亮显示&…

传输层:UDP协议

传输层中有两个重要的协议&#xff1a;TCP协议和UDP协议。 本博文分享的是UDP协议&#xff0c;本文将从UDP的协议格式、UDP的特定以及其缓冲区入手。 传输层 传输层的作用是负责数据能够从发送端传输到接收端&#xff0c;主要是传输策略。 端口号 端口号标识的是一个主机上进…

【AIGC提示工程 - Midjourney教程:三】如何利用Midjourney AI创作一幅杰出的艺术作品?

关注元壤教育公众号系统学习AIGC提示工程课程。 更多AIGC好博客&#xff0c;请移步访问AIGC博客派 要在Discord上使用Midjourney机器人&#xff0c;您需要输入一个指令。指令能帮助您创建图片、修改默认设置、监控用户信息以及执行其他有用的操作。如果想要生成一张图片&#x…

RHCSA之Linux目录结构

目录 Linux目录结构 Linux目录结构的特点 分区‘加载’于目录结构 Windows与Linux目录结构区别 工作目录、用户家目录及路径 Linux的文件类型大致可分为 查看文件系统类型 方法一 ls -l 路径 方法二 file 路径 RHCSA之Linux目录结构 使用树形目录结构来组织和管理文件 整个…

51单片机(十三)DS18B20温度传感器

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

第14届蓝桥杯C++省赛(初级)真题

一、选择题&#xff08;50分&#xff09; 第 1 题 单选题&#xff08;10分&#xff09; C中&#xff0c;bool类型的变量占用字节数为 ( )。 *选择题严禁使用程序验证&#xff0c;选择题不答或答错都不扣分 A.1 B.2 C.3 D.4 第 2 题 单选题&#xff08;10分&#xff09;…

Windows 下载与安装CUDA和Pytorch【安装教程、深度学习】

参考链接&#xff1a;Windows 下安装 CUDA 和 Pytorch 跑深度学习 - 动手学深度学习v2_哔哩哔哩_bilibili 0.准备工作 请确保你是NVIDIA的显卡&#xff08;不能是AMD、集成显卡&#xff09; 1.下载CUDA 打开developer.nvidia.com/cuda-downloads&#xff0c;打开有点慢 选择…

2023/5/14 数值计算方法考试复盘

第一题 问我1-()如果减少乘除次数,那么如何做出变形。 正确解法&#xff1a; 可以利用乘法分配律&#xff0c;将1拆分成1 - 1/2! 1/2! - 1/3! 1/3! - ... - 1/n! 1/n!&#xff0c;然后将拆分出来的两项合并&#xff0c;得到&#xff1a; 1 - (1/2! - 1/2!) - (1/3! - 1/3…

支付系统设计一:支付系统产品化

系列文章目录 支付系统设计一&#xff1a;支付系统产品化 支付系统设计二&#xff1a;统一开发框架 支付系统设计三&#xff1a;渠道网关设计01-总览 支付系统设计三&#xff1a;渠道网关设计02-客户端报文解析 支付系统设计三&#xff1a;渠道网关设计03-参数验证 支付系统设…

在 Windows 上安装 Docker

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在 Windows 上安装Docker。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Docker是什么 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可抑制的…

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档&#xff1a;https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址&#xff1a;https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代&#xff1a; 传统部署时代&#xff1a;在物理服务器上运…

C语言——表达式求值中类型转换和优先级等问题

目录 1.隐式类型转换 2.算数转换 ​3.操作符的属性 1.隐式类型转换 C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升。 整型提升的意义&a…

Sentinel : 服务容错(降级熔断、流量整形)

什么是服务雪崩&#xff1f; 服务雪崩效应是一种因“服务提供者的不可用”&#xff08;原因&#xff09;导致“服务调用者不可用”&#xff08;结果&#xff09;&#xff0c;并将不可用逐渐放大的现象。 我来用一个模拟场景带你感受一下服务雪崩的厉害之处。假设我有一个微服…

小世界网络评估

小世界网络评估 文章目录 小世界网络评估[toc]1、网络小世界定义2、网络评估R代码 1、网络小世界定义 现实中许多网络巨型组件都发现了“小世界特性”。小世界特性是指 网络节点间最短路径通常较小网络聚集系数较高 网络最短路径L计算公式为 L 1 n ( n − 1 ) ∑ i ⩾ j d…

【JZ-7Y-16静态中间继电器 触点容量大、电阻小 抗干扰强 JOSEF约瑟】

系列型号&#xff1a; JZ-7Y-15静态中间继电器&#xff1b; JZ-7J-15静态中间继电器&#xff1b; JZ-7L-15静态中间继电器&#xff1b; JZ-7D-15静态中间继电器&#xff1b; JZ-7Y-16静态中间继电器&#xff1b; JZ-7J-16静态中间继电器&#xff1b; JZ-7L-16静态中间继…

自动化渗透测试自动化挖掘src(2)

文章目录 前言思路ICP备案子域名枚举收集可用服务漏洞攻击 前言 上一谈我们讨论了自动化渗透测试的实验&#xff0c;但是他过于依赖fofa&#xff0c;不得不承认&#xff0c;fofa在资产收集这方面做的确实很厉害&#xff0c;但是就是需要花钱&#xff0c;那有没有不需要花钱都手…

UI GameObject可以在Scene View中显示,但是在Game View不能显示

出现UI GameObject可以在Scene View中显示&#xff0c;但是在Game View不能显示这种问题&#xff0c;可能有很多种原因&#xff0c;例如Layer设定、Camera Clipping设定、font assets等问题。 对于TextMeshPro&#xff0c;还有Material Set的问题&#xff0c;见这篇文章。 而我…