redis持久化【RDB+AOF】持久化双雄

news2024/11/24 17:46:45

这是redis系列文章之《redis持久化【RDB+AOF】持久化双雄》,上一篇文章【redis基础】redis的十大数据类型_努力努力再努力mlx的博客-CSDN博客

感谢大家的支持~


目录

RDB

什么是RDB

RDB的作用

配置文件关于RDB部分  6vs7

操作步骤

修改配置文件(本案例设置5s修改2次)

修改dump文件的保存路径

修改dump文件名称

触发备份

自动触发

如何恢复

手动触发

优劣分析

修复RDB文件

触发快照的情况

禁用快照

优化配置

总结

AOF

什么是AOF

AOF的作用

AOF持久化工作流程

AOF缓冲区三种写回策略

redis6 vs redis7配置文件关于AOF的区别

AOF文件发挥作用

AOF文件损坏后的修复

AOF的优劣

AOF的重写机制

AOF优化配置

总结

RDB - AOF混合持久化

纯缓存模式


RDB

什么是RDB

RDB是在指定的时间间隔内,对执行数据集时间点进行快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。在这种情况下,即使redis发生宕机或者其他类型的故障问题,数据也会在快照文件中有所保存,数据的可靠性也有所保证。这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。

RDB的作用

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里。其中redis的数据都是保存在内存中的,在保存备份时它执行的是全量快照,也就是说把内存中的所有数据都记录在磁盘中(一锅端)

配置文件关于RDB部分  6vs7

在redis6.0.16及以下和redis6.2、redis7.0.0的配置文件对生成快照文件的设置有所不同

redis6.0.16

redis6.2、redis7.0.0

操作步骤

修改配置文件(本案例设置5s修改2次)

修改dump文件的保存路径

修改dump文件名称

触发备份

自动触发

第一种情况:

第二种情况:因为我们设置的是5s内变化2次会生成dump文件,所以在这种情况下不会生成dump文件

如何恢复

直接将备份文件进行恢复即可

需要注意的是:当我们进行flushdb的操作后,同样会生成dump文件,但是这个dump文件中的内容是空的,也就是说,它保存了空的数据,对于redis数据恢复而言没有任何意义。 

手动触发

save

  • 在主线程中执行会阻塞redis服务器,直到持久化工作完成才能处理其他命令, 线上禁止使用

bgsave

  • Redis 会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发过程会 fork 一个子进程由子进程复制持久化过程
  • lastsave 命令可以获取最后一次成功执行快照的时间 

优劣分析

优势:

  • 适合大规模的数据恢复
  • 按照业务定时备份
  • 对数据完整性和一致性要求不高
  • RDB 文件在内存中的加载速度比AOF快得多

 劣势:

  • 在一定间隔时间做一次备份,如果redis意外down机,就会丢掉最近一次快照到down机时的数据
  • 内存数量的全量同步,如果数据量过大会导致IO严重影响服务器性能
  • RDB依赖于主进程的 fork ,在更大的数据集中,这可能会导致服务器请求的瞬间延迟
  • fork 的时候内存中的数据被克隆了一份,大致2倍的膨胀性,需要考虑

修复RDB文件

触发快照的情况

  • 配置文件中默认的快照配置
  • 手动 save/bgsave 命令
  • 执行flush / flushdb 命令也会产生 dump.rdb 文件,但里面是空的,无意义
  • 执行 shutdown 且没有设置开启 AOF 持久化
  • 主从复制时,主节点自动触发

禁用快照

动态所有停止RDB保存规则的方法:redis-cli config set save ""

优化配置

总结

AOF

什么是AOF

  • 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
  • 默认情况下,redis是没有开启AOF的
  • 开启AOF 功能需要设置配置 : appendonly yes
     

AOF的作用

简单来说,AOF的作用是记录指令中的写操作,当redis重新启动时从生成的aof文件中赌球数据,进行数据的恢复

AOF持久化工作流程

AOF缓冲区三种写回策略

三种写回策略

  • always 同步写回,每个写命令执行完立刻同步地将日志写回磁盘
  • everysec 每秒写回,每个写命令执行完,只是先把日志写到AOF缓冲区,每隔1s把缓存区地数据写入磁盘
  • no 操作系统控制写回,只是将日志先写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

 

redis6 vs redis7配置文件关于AOF的区别

aof文件-保存路径

  • Redis 6 AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis.conf配置文件的dir配置
  • Redis 7 作了改变 dir/appendirname 

d. aof文件-保存名称

  • Redis 6 有且只有一个
  • Redis 7 三个文件:base基本文件、incr增量文件、manifest清单文件(manifest文件会被默认清除)

AOF文件发挥作用

恢复1:

重启redis然后重新加载,结果OK


恢复2:

  • 写入数据进redis,然后flushdb+shutdown服务器
  • 新生成了dump和aof
  • 备份新生成的aof.bak,然后删除dump/aof
  • 再看恢复B重启redis然后重新加载
  • 停止服务器,拿出我们的备份修改后再重新启动服务器。

AOF文件损坏后的修复

在网络闪断时,aof文件写了错误的指令,使用 异常修复命令 : redis-check-aof --fix 进行修复 

AOF的优劣

优势

  • 更好的保护数据不丢失、性能高、可做紧急恢复

劣势

  • 相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
  • aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

AOF的重写机制

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

自动触发

满足配置文件中的选项后,Redis会记录上次重写时地AOF大小
默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时


手动触发

客户端向服务器发送 bgrewriteaof 命令
结论:也就是说AOF文件重写并不是对原文件进行重新整理,而是直接读取服务器现有的键值对,然后用一条命令去代替之前记录这个键值对的多条命令,生成一个新的文件后去替换原来的AOF文件。

AOF文件重写触发机制:通过 redis.conf配置文件中的auto-aof-rewrite-percentage:默认值为100,以及auto-aof-rewritemin-size: 64mb配置,也就是说默认Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

AOF重写原理 


1.在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
2.与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
3.当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中
4.当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中
5.重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

AOF优化配置

总结

RDB - AOF混合持久化

同时开启两种持久化方式

当redis 重启时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。
那要不要只使用AOF呢
安特雷兹建议不要
因为RDB更适合用于备份数据库(AOF不断变化不好备份),留着AOF作为一个万一的手段

1 开启混合方式设置

设置aof-use-rdb-preamble的值为 yes   yes表示开启,设置为no表示禁用

2 RDB+AOF的混合方式---------> 结论RDB镜像做全量持久化,AOF做增量持久化

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。----》AOF包括了RDB头部+AOF混写

纯缓存模式


同时关闭RDB + AOF

save “”
禁用rdb
禁用db持久化模式下,我们仍然可以使用命令save、bgsave生成rdb文件
appendonly no
禁用aof
禁用aof持久化模式下,我们仍然可以使用命令 bgrewriteaof生成aof文件

 

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

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

相关文章

通过python采集整站lazada商品列表数据,支持多站点

要采集整站lazada商品列表数据,需要先了解lazada网站的结构和数据源。Lazada是东南亚最大的电商平台之一,提供各种商品和服务。Lazada的数据源主要分为两种:HTML和API。 方法1:采集HTML数据 步骤1:确定采集目标 首先…

Redis - Redis为什么快

根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数),有兴趣的可以参考官方的基准程序测试《How fast is Redis?》,官方地址: https://redis.io/topics/benchmarks 横轴是连接数&#xf…

GPT怎样教我用Python进行数据可视化

文章目录 GPT怎样教我用Python进行数据可视化matplotlibpyecharts总结 GPT怎样教我用Python进行数据可视化 🚀🚀首先,我们先看一下这段代码,这是我之前写来读取excel文件中xx大学在各个类别中的获奖情况,并保存在一个…

【数据结构】24王道考研笔记——线性表

线性表 目录 线性表定义和基本操作顺序表静态顺序表动态顺序表 链表单链表不带头结点:带头结点: 双链表循环链表循环单链表:循环双链表: 静态链表 顺序表链表比较逻辑结构:存储结构:基本操作: 定…

【JUC基础】11. 并发下的集合类

目录 1、前言 2、并发下的ArrayList 2.1、传统方式 2.1.1、程序正常运行 2.1.2、程序异常 2.1.3、运行期望值不符 2.2、加锁 2.3、synchronizedList 2.4、CopyOnWriteArrayList 3、并发下的HashSet 3.1、CopyOnWriteArraySet 3.2、HashSet底层是什么? 4…

python基础----环境搭建-----01

一 python介绍 1.1 Python 特点 Python 是完全面向对象的语言。函数、模块、数宁、宁符串都是对象,在 Python 中一切皆对象。完全支持继承、重载、多重继承。支持重载运算符,也支持泛型设计。Python 拥有一个强大的标准库,Python 语言的核心…

element-ui菜单el-menu的使用

效果演示 先给大家看一下效果吧 el-menu详解 Menu Attributes# 属性名说明类型可选值默认值mode菜单展示模式stringhorizontal / verticalverticalcollapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)boolean—falseellipsis是否省略多余的子项…

四、 JSP04 Servlet 技术

四、 Servlet 技术 4.1 认识 Servlet Web 容器在处理 JSP 文件时,会将 JSP 文件通过 JSP 容器转换成可识别的 .java 文件 这个 .java 文就是一个 Servlet 类,JSP 技术就是基于 Servlet 实现的 4.1.1 什么是 Servlet Servlet 是一个符合特定规范的 Java…

Linux系统编程学习 NO.5 ——shell命令行的概念以及原理、权限的概念

1.shell命令行的概念以及原理 首先,用户下达指令需求。此时Linux操作系统的内核kernel,并不会直接接收用户下达的指令,因为操作系统不擅长跟用户打交道。那么指令要如何下达呢?这就命令行解释器来对用户的指令进行处理。 1.1.shell命令行的…

每日学术速递5.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Text2NeRF: Text-Driven 3D Scene Generation with Neural Radiance Fields 标题:Text2NeRF:具有神经辐射场的文本驱动 3D 场景生成 作者:Jingb…

从组件化角度聊聊设计工程化

目录 设计系统 设计系统的定义 设计系统的优势 设计系统存在的问题 设计工程化 设计系统探索 设计系统落地实践 Design Token Design Token 实践 设计工程化理想方案构想 展望 参考文献 近几年围绕业务中台化的场景,涌现出了许多低代码平台。面对多组件…

RAW、RGB 、YUV三种图像格式理解

文章目录 1. 背景2. 相关概念2.1 颜色与色彩空间2.2 RAW图像2.3 RGB图像2.4 YUV图像 3. 分类简图 RAW、RGB 、YUV三种图像格式理解 1. 背景 在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认…

Redis实战之实现共同关注

Redis实战之实现共同关注 一 需求 二 实现 package com.hmdp.service.impl;import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.…

用ChatGPT一分钟自动产出一份高质量PPT

如何用ChatGPT一分钟自动产出一份高质量PPT,节约时间摸鱼呢?废话少说,直接上案例。 一.用ChatGPT做一下提问,这里我用的小程序万事知天下,根据自己PPT的需求,制作chatgpt的prompt就行了。 请帮我创建一个以…

Spring Security 核心解读(一)整体架构

Spring Security 整体架构 前提整体架构Servlet 整体的过滤器模型Security 过滤器链自定义过滤器 实际开发解决方案一个替代cookie认证的filter其他组件,后续抽时间再整理整理 前提 开源项目一手文档基本都在github,标准文档基本都在官网。 最好的文档就…

在Centos Stream 9上Docker的实操教程 - Docker的常用命令

在Centos Stream 9上Docker的实操教程 - Docker的常用命令 Docker启动类命令Docker镜像命令镜像列表 docker images镜像查找 docker search拉取镜像 docker pull删除镜像 docker rmi查看占用信息 docker system df容器创建新镜像 docker commit 容器命令启动容器 docker run查看…

【历史上的今天】4 月 27 日:Tumblr 上线;施乐推出了 Star 工作站;第一台安德伍德打字机诞生

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 4 月 27 日,在 1791 年的今天,摩斯电码的共同发明者、电报发明者塞缪尔摩斯(Samuel Morse)诞生。摩斯最开始是一…

基于springboot + vue 的学生成绩管理系统

基于springboot vue实现的学生成绩管理系统 主要模块: 1)学生模块:我的成绩、成绩统计、申述管理、修改密码 2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3)管理员模块&…

Vue自定义插件的使用

通过 Vue 实例绑定方法: 在 plugins.js 文件中创建 filter 过滤器,定义一个只返回前四个字符的方法。 export default {install(Vue){// 定义过滤器Vue.filter(mySlice,function(value){return value.slice(0,4);})} } 由于我们之前在 main.js 文件中引入…

六级备考20天|CET-6|翻译练习|真题·红楼梦|8:50~9:08+11:33~12:00

目录 1 中文 2 英文​ 3 解析 4 订正 ​ 1 中文 漏翻译:具有很强的艺术感染力! 2 英文 3 解析 tell 讲述 tragic love story 悲剧性爱情故事 own painful personal experience 自己痛苦的个人经历 major/minor characters 主要/次要人物 be viv…