SpringCloud-高级篇(十)

(1)单节点Redis问题

 

缓存大家都不陌生,在企业里面只要做缓存都会用到Redis,我们在使用的时候都是做的单节点部署,单节点部署是存在一些问题的,分布式缓存正是Redis的集群,正是为了解决单节点部署的问题的 

单节点Redis存在的问题:

Redis是基于内存存储,并发能力非常强但是毕竟单节点,到了618等节日电商场景,还是无法满足高并发场景 

业务对Redis的依赖非常多,不仅仅把它做为缓存,有时候还把它作为分布式Session 等等,Redis应用场景如此的多,一旦它出现故障,对整个微服务影响范围也很大,我们得保证Redis集群是持续可用的,一旦集群中任何一个服务出现故障,不能够影响其他服务的使用,必须保证在运行的过程中去修复故障的节点实现在线边运行边修复的效果,单节点Redis做不到 

主从集群,从节点有很多个,多个从节点之间就是负载均衡,主从之间做读写分离,应对数据库中读写的互斥,做了读写的分离,读和写之间就不会有影响了,并发能力也就更强了,也满足高可用的效果,因为主宕机了还有从顶上去,进一步避免宕机导致的数据丢失,虽然书从节点很多但是一直挂下去总有一天会挂完,所以不仅人多做主从,还要保证一旦有人挂了要把它扶起来,故障恢复,就要靠哨兵机制了

我们做了主从集群,存储上限还是单个节点的存储上限,我们可以学习ES,在ES中我们把数据分片保存在不同的节点上,存储更多的数据,Redis搭建分片集群利用插槽机制实现数据分散还可以动态扩容

(2)Redis持久化-RDB

 

启动: 

Redis客户端建立连接: 

Redis在停机是自动执行Save:存储数据快照

按Ctrl +C:关机的时候执行的Save(同步)

数据快照默认保存在运行目录

重新启动Redis:会读取RDB快照文件

数据还在:

数据持久化都是停机后执行的,那么突然宕机了,没有做持久化,我们需要没隔一段时间,就做一下持久化,RDB默认就开启了,RDB是bgsave(异步):

修改了快照名称,当启动Redis的时候并没有数据恢复的日志:因为没有这个快照,有的话就会显示

此时再获取数据就没有了,因为快照名称修改了:

重新添加一个key:

看到Redis的日志: 进行了持久化

Redis如果设置策略时间太长,中间的这一段时间做了数据的写入没有持久化就会导致数据丢失,如果调短一些设置为1s,行不,不行的如果你的时间调的非常短,RDB执行的频率就会过高,每一秒执行一次,数据量小还好,如果数据量很大,10G写入磁盘,1秒执行一次根本忙不过来,因此来说时间也不能做的太短,也不能太长,使用默认的就可以了,如果在默认的时间内出现了数据丢失,怎么办呢?后面会学习其他的持久化方案AOF,对RDB进行一个弥补

(3)RDB异步持久化原理-Bgsave

bgsage开始fork主进程是得到子进程的时候,是阻塞的,此时主进程只能干这件事,为了加快速度完成这件事,主进程尽快的去处理用户的请求避免阻塞时间过久,fork底层是怎么实现的呢?

之后是异步的

物理内存可以理解计算机的内存条,主进程实现对Redis的读写,肯定是在内存中操作,在Linux系统中所有的进程都没有办法直接操作物理内存而是由操作系统给每个进程分配一个虚拟内存主进程只能操作虚拟内存,操作系统会维护一个虚拟内存与物理内存之间的映射表称为页表,主进程操作虚拟内存,虚拟内存基于页表的映射关系,到物理内存中真正的存储位置,就能实现对物理内存数据的读写了

在fork的时候并不是把内存数据做拷贝,而是把页表做拷贝,子进程在操作虚拟内存时,根据页表跟主进程一样,一定能映射到相同的物理内存区域就可以实现子进程跟主进程的内存共享了,这样无需拷贝内存中的数据而实现内存共享这样速度就会非常的快,阻塞的时间也就非常的短了

这就是异步的持久化,是异步的子进程在写RDB的过程中,主进程也可以接收用户的请求去修改内存中的数据,这个时候子进程在读,主进程在写,会有冲突,为了避免fork底层会采用copy_on_write的机制

主进程可能会在子继承复制的过程中,可能会修改到每一份数据,此时所有的数据都会拷贝一份,此时以为这Redis对内存的占用也就翻倍了  ,这是极端的情况,有可能会发生。 

(4)Redis持久化-AOF

RDB持久化有可能导致数据丢失的 ,因为它两次持久化时间间隔较长,下面学习AOF持久化,他可以弥补RDB

禁用RDB:save=“”

开启AOF:

 

重启Redis:Redis并没有读取数据

重新存一个数据 

生成一个aof文件

停止Redis:

重启数据会加载AOF

AOF 会记录所有命令,体积会比RDB大,因为一个可以可能重复操作多次,当重启的时候,它会一次执行命令,此时很多命令是重复的,执行没有意义

解决:

有了AOF要RDB干嘛?RDB充当的是备份的作用,把数据备份到磁盘,或者把数据拷贝放到别的而地方中去,其他机器其他机房,来实现异地容灾,如果说机房都毁了,AOF 就废了,但是把它拷贝到了别的机房,数据就能实现永远都能够恢复的,它起到了一种数据恢复的作用

 

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

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

相关文章

Vue实现模糊查询

在Vue中实现模糊查询,你可以使用JavaScript的filter和includes方法,结合Vue的v-for指令。下面是一个简单的例子: 首先,你需要在你的Vue实例中定义一个数据数组和一个查询字符串。 data() { return { items: [Apple, Banana, Che…

Windows下多个JDK版本快速切换

Windows下多个JDK版本快速切换 本文以windows11为例,安装了jdk1.8\jdk11\jdk17三个版本。 1 安装junction工具 需要借助junction工具创建软链接 下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/junction 下载后,一般…

大数据毕业设计:租房推荐系统 python 租房大数据 爬虫+可视化大屏 计算机毕业设计(附源码+文档)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

广播及代码实现

广播(Broadcast)是一种网络通信方式,它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息,让所有设备都能接收并处理。在广播中,通信的目标是整个网络而不是特定的单个设备。 向子网中…

【JAVA】Java 中 Set集合常用方法

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 常用方法 代码示例 结语 我的其他博客 前言 Java中的Set接口提供了一种不允许包含重复元素的集合。常用的实现类有HashS…

把苹果手机上的备忘录转为长图片,分享给别人方法教程

在这个信息爆炸的时代,手机备忘录几乎成了我随身携带的“记忆宝库”。每当我脑海中闪现出一个想法、灵感或是需要记住的重要事项,我都会第一时间打开苹果手机的备忘录,将它们一一记录下来。备忘录的简洁界面和高效操作总能让我在忙碌的生活中…

正负样本分配策略simOTA

simOTA是YOLOX中提出的 正负样本分配策略(OTA, SimOTA,TAS) OTA源于2021年cvpr的论文,使训练和验证的标签有着更好的对应关系。 yolov5没有用到,只有一种loss: from utils.loss import ComputeLoss comput…

线性代数-第五课,第六课,第七课,第八课

第五课 判断某向量是否可由某向量组线性表示 把向量组组成一个行列式,计算行列式的秩 把所有向量放在一起构成一个行列式,计算行列式的秩 如果两个行列式的秩相等,表示可以线性表示,写答案的格式如下 线性表示:bk…

大模型应用实践:AIGC探索之旅

随着OpenAI推出ChatGPT,AIGC迎来了前所未有的发展机遇。大模型技术已经不仅仅是技术趋势,而是深刻地塑造着我们交流、工作和思考的方式。 本文介绍了笔者理解的大模型和AIGC的密切联系,从历史沿革到实际应用案例,再到面临的技术挑…

第28关 k8s监控实战之Prometheus(二)

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 这节课我们用prometheus-operator来安装整套prometheus服务 https://github.com/prometheus-operator/kube-prometheus/releases 开始安装 1. 解压下载的代码包 wget https://github.com/…

二、串行FLASH文件系统FatFs移植

经过上一节的分析,我们对文件系统有一定的理解了,这一节给大家介绍怎么把FatFs文件系统的这些代码移植到STM32S上,然后STM32利用这一些代码或者函数,以文件的格式对FLASH进行读写数据。 实则对diskio.c提供一些函数接口。 首先将…

Kubernetes-网络

一. 前言 flannel两种容器跨主机通信的方案,其中UDP模式是IP in UDP,即三层报文封装在UDP数据包中通信;而vxlan模式则是MAC in UDP,即二层报文封装在UDP数据包中通信 flannel UDP模式和vxlan模式都对数据包做了封解包&#xff0c…

手把手教你在Ubuntu22上安装VideoRetalking

VideoReTalking是一种新系统,可以根据输入音频编辑真实世界的谈话头部视频的面孔,即使具有不同的情感,也能生成高质量和口型同步的输出视频。我们的系统将这个目标分解为三个连续的任务: (1)具有规范表情的…

SpringBoot实现登录拦截器

SpringBoot实现登录拦截器 对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦截器来实现用户登录拦截并验证。 1、SpringBoot实现登录拦截的原理 SpringBoot通过实现HandlerIntercep…

一篇文章学会如何在 NestJS 中集成 MongoDB 并实现数据的增删改查操作

前言 在现代的Web应用程序开发中,无论是在数据存储、检索、还是数据流转的各个环节,数据库都扮演着极其重要的角色。MongoDB是一个基于分布式文件存储的开源数据库系统,以其高性能、高可用性和易扩展性著称。 作为JavaScript社区最受欢迎的…

java正则表达式大全(参考)

一、校验数字的表达式 1 数字:1$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9])$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9])(.[0-…

普中STM32-PZ6806L开发板(HAL库函数实现-访问多个温度传感器DS18B20)

简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的,其实数据手册都有说到, 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…

本地git服务器的使用

最后总结一句,用gitlab最省事,管理权限最方便,别像下文一样整了。 Windows上使用: 首先要在windows开发机上生成密钥: 1.安装git,首先去git官网下载git,https://git-scm.com/downloads&#xff…

初学者SkyWalking详细使用文档

SkyWalking使用文档 下载地址:https://skywalking.apache.org/downloads/ 主要下载:skywalking apm(tar) 、agents(tar) 解压: (可选操作): ​ apache-skywalking-apm-bin --&g…

chromium在中文用户名下无法编译的问题

新电脑没有太注意,起用户名的时候用了中文。 在编译chromium104的代码时,因为环境变量有中文导致编译失败: 因为我的电脑默认是使用gbk编码,而不是utf-8编码。 这个问题有三种解决办法: (一)把…