大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (正在更新…)

章节内容

上节完成了的内容如下:

  • Redis 持久化原因
  • Redis 持久化机制 RDB AOF
  • 基础概念、适用场景等

在这里插入图片描述

RDB

RDB(Redis DataBase),是Redis的默认存储方式,RDB是通过快照的方式(snapshotting)完成的。

触发方式

  • 符合自定义配置的快照规则
  • 执行 save 或 bgsave 命令
  • 执行 flushall 命令
  • 执行主从复制操作(第一次)

配置参数

redis.conf 中配置:save

save "" # 不使用RDB存储
save 900 1 # 900秒(15分钟)至少1个键修改则保存
save 300 10 # 300秒(5分钟)至少10个键修改则保存

显式触发

bgsave

执行流程

在这里插入图片描述

  • Redis 父进程判断:当前是否在执行 Save、bgsave、bgrewriteaof等等指令的子进程,如果在执行则bgsave命令直接返回
  • 父进程执行fork操作创建子进程,这个过程中父进程是要进行阻塞的,Redis此时不能执行来自客户端的任何命令
  • 父进程fork后,bgsave命令返回 “Background saving started”信息并不再阻塞父进程,并可以响应其他命令。
  • 子进程创建RDB文件,根据父进程内存快照生成临时文件,完成对原有文件进行原子替换
  • 子进程发送信号父进程表示完成,父进程更新统计信息。
  • 父进程Fork结束后,继续工作。

文件结构

在这里插入图片描述

  • 头部 5字节固定位 REDIS
  • 4字节 RDB 版本号
  • 辅助字段 以 KEY-VALUE
  • 存储数据库号码
  • 字典大小
  • 过期 KEY
  • 主要数据 以 KEY-VALUE
  • 结束标志
  • 校验和,看文件是否存坏,是否被修改

RDB优点

  • RDB是二进制压缩文件,占用空间小,便于传输
  • 主进程Fork子进程,可以最大化Redis性能,主进程不能够太大,否则会导致阻塞

RDB缺点

  • 不保证数据的完整性,会丢失最后一次快照以后的数据

AOF

AOF(append only file)是Redis的另一种持久化方式,Redis默认情况下是不开启的。
Redis 将所有对数据库进行写入命令记录到AOF文件中,这样 Redis 重启后按顺序执行这些指令即可恢复。
AOF 会记录过程,RDB 是保存结果。

配置参数

同样,我们修改 redis.conf

# 参数开启 AOF
appendonly yes
# AOF的位置
dir ./
# 默认文件名
appendfilename appendonly.conf

具体原理

AOF 文件中存储的 Redis 的指令,具体过程有三个阶段:

  • 命令传播:Redis 将执行完的命令、参数等发送到 AOF 程序中
  • 缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议格式,再追加到服务器的AOF缓存中。
  • 文件写入保存: AOF 缓存中的内容会被写入到 AOF 文件末尾,如果设定的AOF保存条件被满足的话,fsync函数或者fdatasync函数会被调用,写入的内容被真正的保存到磁盘中

保存方式

可以配置保存的方式如下:

  • AOF_FSYNC_NO 不保存
  • AOF_FSYNC_EVERYSEC 每一秒钟保存一次 (默认)
  • AOF_FSYNC_ALWAYS 每一个指令保存一次

在这里插入图片描述

AOF 瘦身

平常会遇到如下的场景

set name wzk
set name kangkang # 此时 保存 set name wzk 是没有意义的
set age 13

或者是这种场景

lpush list 1 2 3
lpush list 4 5 6
# 这种优化完可以变成: lpush 1 2 3 4 5 6

Redis 不希望 AOF 重写造成服务器无法处理请求,所以 Redis 决定将 AOF 重写程序放入到后台中:

  • 子进程AOF重写期间,主进程可以继续处理请求
  • 子进程带有主进程的发数据副本,使用子进程

不过使用子进程也有一个问题:
因为子进程在进行AOF重写期间,主进程还需要继续处理命令,而新的命令可能会对现有的数据进行修改,这会让当前数据库的数据和重写后的AOF文件中的数据不一致
为了解决不一致的问题,Redis 加了一个 AOF 缓存,这个缓存在Fork出子进程之后,Redis主进程接收到新的写命令时,除了会将这个命令追加到现有的AOF文件,还会追加到这个缓存中。

具体的逻辑图如下:
在这里插入图片描述

触发方式

可以修改 redis.conf

# 表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准
auto-aof-rewrite-percentage 100
# 限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb

显式触发

bgrewriteaof

持久化混合

RDB 和 AOF 各有优缺点Redis 4.0 版本之后开始支持 RDB + AOF 混合的模式。
如果在混合模式下,AOF rewrite时就直接把 RDB的内容写到 AOF 的开头。
如果要开启 混合模式 修改 redis.conf

aof-use-rdb-preamble yes

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

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

相关文章

SQL注入万字详解,基于sqli-labs(手注+sqlmap)

目录 一、什么是SQL 1.什么是SQL 2.SQL的作用 3.MySQL基础知识 4.SQL增、删、改语句 *5.SQL查询语句 二、什么是SQL注入 1.SQL注入原理: 2.SQL注入: 3.SQL注入危害: 4.SQL注入技术分类: 5.防御方法:使用参…

javaEE-01-tomcat

文章目录 javaWebTomcat启动 Tomcat 服务器测试服务器是否成功停止tomcat服务器修改服务器的端口号 Idea整合tomcat服务器 javaWeb 所有通过 Java 语言编写可以通过浏览器访问的程序的总称,是基于请求和响应来开发的。 请求: 客户端给服务器发送数据(Request)响应: 服务器给客…

萝卜快跑:自动驾驶的先锋与挑战

萝卜快跑:自动驾驶的先锋与挑战 近段时间,由萝卜快跑引发的自动驾驶事件如火如荼,成为科技领域的热门话题。萝卜快跑作为自动驾驶领域的重要参与者,其最新事件引发了广泛的关注和讨论。 萝卜快跑是百度推出的自动驾驶出行服务平台…

C语言 之 理解指针(5)

转移表 本章主要讲的是函数指针数组的用途&#xff1a;转移表 让我们来看看下面的代码&#xff1a; 计算器的一般实现&#xff1a; #include <stdio.h> int add(int a, int b) {return a b; //加法函数 } int sub(int a, int b) {return a - b; //减法函数 } int mul…

Pytorch使用教学2-Tensor的维度

在PyTorch使用的过程中&#xff0c;维度转换一定少不了。而PyTorch中有多种维度形变的方法&#xff0c;我们该在什么场景下使用什么方法呢&#xff1f; 本小节我们使用的张量如下&#xff1a; # 一维向量 t1 torch.tensor((1, 2)) # 二维向量 t2 torch.tensor([[1, 2, 3], …

common-intellisense:助力TinyVue 组件书写体验更丝滑

本文由体验技术团队Kagol原创~ 前两天&#xff0c;common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息&#xff1a; common-intellisense 支持 TinyVue 组件库啦&#xff01; common-intellisense 插件能够提供超级强大的智能提示功能&…

Ubuntu升级软件或系统

Ubuntu升级软件或系统 升级Ubuntu系统通常是一个相对简单的过程&#xff0c;但在进行操作之前&#xff0c;请务必备份重要数据以防万一。下面是升级Ubuntu系统的一般步骤&#xff1a; 使用软件更新工具升级系统 打开终端&#xff1a; 按下 Ctrl Alt T 组合键打开终端。 更…

Java设计模式—单例模式(Singleton Pattern)

目录 一、定义 二、应用场景 三、具体实现 示例一 示例二 四、懒汉与饿汉 饿汉模式 懒汉模式 五、总结 六、说明 一、定义 二、应用场景 ‌单例模式的应用场景主要包括以下几个方面&#xff1a; ‌日志系统&#xff1a;在应用程序中&#xff0c;通常只需要一个日…

【JS逆向课件:第十三课:异步爬虫】

回顾 并行和并发 表示程序/计算机具有处理多个任务的能力 并行表示可以同时处理多个任务&#xff08;几个多核CPU&#xff09;并发无法同时处理多个任务&#xff0c;但是可以基于时间片轮转法在多任务间快速切换的执行任务。 同步和异步 在基于并行或者并发处理任务的时候&am…

链式法则和自动求导

向量链式法则 说明&#xff1a; 1.第一个式子&#xff0c; y是标量&#xff0c;u是标量&#xff0c;x是n维向量 2.第二个式子&#xff0c;y是标量&#xff0c;u是k维向量&#xff0c;x是n维向量&#xff0c;所以y对u求导是k维的行向量&#xff0c;u对x求导是k行n列的矩阵&…

学术研讨 | 区块链治理与应用创新研讨会顺利召开

学术研讨 近日&#xff0c;国家区块链技术创新中心组织&#xff0c;长安链开源社区支持的“区块链治理与应用创新研讨会”顺利召开&#xff0c;会议围绕区块链治理全球发展现状、研究基础、发展趋势以及区块链行业应用创新展开研讨。北京大学陈钟教授做了“区块链治理与应用创…

消息队列的面试题

目录 面试题消息队列的使用场景场景描述与数据数据流程与具体数据优势与数据支持流量控制的举例场景&#xff1a;在线视频平台的直播流传输场景描述流量控制策略数据与效果 面试题 为什么使用消息队列&#xff1f; 消息队列有什么优点和缺点&#xff1f; Kafka、ActiveMQ、Rab…

opencv:基于阈值的分割方法(固定阈值和自适应阈值)

1、基于阈值的分割 (1)固定阈值分割 将图像分为两个部分&#xff1a;黑和白两个区域 /*author 还下着雨ZG * brief 固定阈值图像分割 * param[in] imSrc, 待分割的图像 * param[out] imSegment, 分割后的图像 * param[in] threVal, 输入的阈值 * return, 返回正整数表示图像…

Ubuntu设置时区

Ubuntu设置时区 在 Ubuntu 中设置时区可以通过以下几个步骤来完成&#xff1a; 方法一&#xff1a;使用命令行 查看当前时区设置&#xff1a; 可以使用以下命令查看当前系统的时区设置&#xff1a; timedatectl如果你想要详细信息&#xff0c;可以运行&#xff1a; timedatec…

ESP32-S3-DevKitC-1开发记录帖——与MPU6050进行姿态检测

目录 MPU6050传感器——姿态检测 1.姿态检测 1.1 基本认识 1&#xff09;坐标系 2&#xff09;姿态角的关系 3&#xff09;陀螺仪检测的缺陷 4&#xff09;利用加速度计检测角度 5&#xff09;利用磁场检测角度 1.2 姿态融合与四元数 1.3传感器工作原理 1.4 MPU6050模…

【PyTorch】图像多分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 多类图像分类的目标是为一组固定类别中的图像分配标签。 目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训…

新电脑如何设置 npm 源及查看源、安装 cnpm、pnpm 和 yarn 的详细教程

当你获得一台新电脑&#xff0c;或需要在现有电脑上优化 JavaScript 和 Node.js 的开发环境时&#xff0c;正确配置 npm 是一步不可少的过程。本教程将详细指导你如何设置 npm 源&#xff0c;查看当前源&#xff0c;以及如何安装 cnpm、pnpm 和 yarn。 1. 设置 npm 源 npm (N…

one-api 源码调试配置

本文主要介绍通过 VSCode 调试 one-api 源码。 一、环境配置 1.1 VSCode 和 one-api 安装 首先,确保已经安装了 VSCode(下载链接)和 one-api 源码(下载链接)已下载并安装了依赖 1.2 安装 Go 插件 在 VSCode 中,安装 Go 插件。 1.3 安装 dlv 调试包 可以通过下载源码…

【黑马java基础】多线程

什么是线程&#xff1f; 线程(Thread)是一个程序内部的一条执行流程。 这个是一条执行流程&#xff0c;虽然有循环&#xff0c;但是最后只有一条流程往前推进&#xff0c;所以视为一条。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 程序是指令序列…

Ubuntu20.04安装Elasticsearch

简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一套开源的日志管理和分析工具&#xff0c;用于收集、存储、分析和可视化日志数据。以下是如何在Ubuntu服务器上安装和配置ELK堆栈以便发送和分析日志信息的步骤。 安装Elasticsearch 首先&#xff0c;安…