SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大量的IO性能会有一定的下降, 如果单节点Redis的内存降低了,比如说只能存10g,20g,那么有海量的数据要存储的时候改怎么办?这个问题解决不了,虽然应对高并发读的问题,如果我写的问题高并发也挺高,该怎么办,这就需要Redis的分片集群来解决

(1)搭建分片集群

需要有多个master,每个master都可以写,并发写的问题就可以保障了,每个master存储10g,好几个master加起来,内存就扩大了,数据存储的上限,取决于master的数量,理论上就能应对海量数据存储的问题 

每个master可以有多个slave节点,每个master可以形成主从关系,就能实现高并发读,具备的主从集群的特性了 

master之间有心跳,原来主从需要做哨兵,现在不需要做哨兵了,master之间互相起到哨兵的效果,通过心跳互相监控,多个master对一个master主观下线,也会把它做到可观下线,也可以做主从的切换,类似哨兵的功能,Redis客户端,可以访问集群中的任意节点,这些节点之间可以自动做路由,把你的请求路由到正确的节点上去访问,所以就不在需要哨兵机制了,同时具备的哨兵机制的所有功能,这就是分片集群的结构

准备多个配置文件 

查看启动状态:

输入yes回车

(2)散列插槽

slots叫做散列插槽

数据为什么跟插槽绑定而不是跟节点绑定,如果数据跟节点绑定,因为Redsi的主节点可能出现宕机的情况的,或者是集群扩容增加了节点,或者是删除了节点,如果节点删除了,或者宕机了数据就跟着丢了,如果跟插槽绑定,当节点宕机时,我们可以这个节点对应的插槽,转移到活着的节点

集群扩容时,我们也可以将插槽进行转移,数据跟着插槽走,永远就能找到数据的位置

集群模式下启动客户端需要加-c的参数

存储num的话算出的slot值是2765正好在7001分配的插槽内,正好存到这里

当存储a算出的是slot值在7003分配的插槽内,它会重定向到7003进行存储,并且只能在7003获取到这个值,在7003是获取不到num的值的它需要重定向到7001获取

所以我们说啊你访问集群中的任意一个节点都没有问题,它都可以显示这种重定向

{}为有效部分,为了让数据存储到一个插槽,可以把{}设为一样,后面的不一样,这样的key就可以存储到同一个Redis实例

(3)集群伸缩

作为分片集群有一个非常重要的功能,就是集群伸缩,就是集群可以动态的增加节点,或者是移出节点

添加集群节点帮助文档:

num存储在的插槽在7001,所以需要把7001的插槽分配到7004上

修改配置文件 

添加新节点7004到集群 后面的ip是集群中存在的一个ip端口

查询集群状态:但是7004是没有插槽的 

需要把num   2765的插槽分配到7004 

插槽的分配:把7001上的插槽分配到7004

移动2765的曹操移动过去,或者直接移动3000

那个曹的id7001的 id,然后done

输入yes 

查看发现7004有了插槽:

此时就可以在7004进行存储获取num

(4)故障转移

分片集群虽然没有哨兵但是也具备故障转移的功能

自动故常转移 

上面我们已经删除了7004节点:

我们让7002master宕机

发现8003变成主了 

重新启动7002就变成slave了:就实现了主从的切换

我们并不需要哨兵,Redis分片集群,具备主从的故障切换

手动故障转移 

这是自动的故障转移,有时候我们需要手动的进行主从切换,比如说这个机器比较老旧了,需要维护了,这个时候我们可以启动一个新的节点,让他称为7001的slave,然后手动的让它替换7001,实现手动故障转移

(5)RedisTemplate访问分片集群

我们最终还是使用java代码访问分片集群的,配置根集群的配置一样,这里只要改变分片集群的ip配置

 

 

查询:

set:他应该去找7001存取

换一个值:

它存取找的是7003节点:对应的插槽

所以集群的自动切换,插槽路由啊,读写分离都实现了。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

家具电子图册制作方法

​随着互联网的普及,越来越多的人选择在线购物,家具行业也不例外。为了满足消费者对高品质家具的需求,家具电子图册应运而生。与传统纸质图册相比,家具电子图册具有更高的转化率、更低的成本和更快的更新速度。 一、与纸质版相比有…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构,称为 Filesystem Hierarchy Standard(文件系统层次结构标准),其定义了不同目录的用途和内容。 浅蓝色文字 /(根目录): /根目录是整个文件系统的起点&…

迁移学习|代码实现

还记得我们之前实现的猫狗分类器吗?在哪里,我们设计了一个网络,这个网络接受一张图片,最后输出这张图片属于猫还是狗。实现分类器的过程比较复杂,准备的数据也比较少。所以我们是否可以使用一种方法,在数据…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)添加 删除 修改 释放

在上篇文章(处理任务队列中的任务)中我们讲解了处理任务队列中的任务的具体流程,eventLoopProcessTask函数的作用: 处理队列中的任务,需要遍历链表并根据type进行对应处理,也就是处理dispatcher中的任务。 // 处理任…

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目,命名为HelloWorld,点击Finish 选择Empty Ability模板,点击Next Hello World 项目已经成功创建,接来下看看效果 2.预览 Hello World 点击右侧的预…

[VUE]2-vue的基本使用

目录 vue基本使用方式 1、vue 组件 2、文本插值 3、属性绑定 4、事件绑定 5、双向绑定 6、条件渲染 7、axios 8、⭐跨域问题 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅…

RPC基础知识总结

RPC 是什么? RPC(Remote Procedure Call) 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC ? 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以&am…

【UML】第17篇 包图

目录 一、什么是包图 二、包图的作用: 三、应用场景: 四、绘图符号的说明: 五、语法: 六、其他要说的 一、什么是包图 包图(Package Diagram)是一种用于描述系统中包和包之间关系的UML图。包是一种将…

Thonny开发ESP32点灯

简介 ESP32是一款功能强大的低功耗微控制器,由乐鑫(Espressif)公司开发。它集成了Wi-Fi和蓝牙功能,适用于各种物联网应用。Thonny是一款基于Python的开源集成开发环境(IDE),专为MicroPython设计…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢? 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据,数据格式为shp,数据坐标为wgs1984地理坐标。数据中不仅包括地铁,也包括轻…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标,都要使用,这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理,非常重要 由于坦克中心点是要严格对齐到一条网格线,并沿着这条线前进的,如果拐弯不做处理&#…

法线变换矩阵的推导

背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…

AI爆文变现:怼量也有技巧!如何提升你的创作收益

做AI爆文项目,赚小钱是没有问题的。 想要赚大钱,就是要做矩阵,怼量。 之前参加训练营的时候,也是要求怼量。 怼量,加高质量文章,让你的收益更高。 如何提升文章质量,减少AI味,AI…

性能优化-OpenMP基础教程(二)

本文主要介绍OpenMP并行编程技术,编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC&am…

动手学深度学习之卷积神经网络之池化层

池化层 卷积层对位置太敏感了,可能一点点变化就会导致输出的变化,这时候就需要池化层了,池化层的主要作用就是缓解卷积层对位置的敏感性 二维最大池化 这里有一个窗口,来滑动,每次我们将窗口中最大的值给拿出来 还是上…

更改ERPNEXT源

更改ERPNEXT源 一, 更改源 针对已经安装了erpnext的,需要更改源的情况: 1, 更改为官方默认源, 进入frapp-bench的目录, 然后执行: bench remote-reset-url frappe //重设frappe的源为官方github地址。 bench remote-reset-url…

ARM工控机Node-red使用教程

嵌入式ARM工控机Node-red安装教程 从前车马很慢书信很远,而现在人们不停探索“科技改变生活”。 智能终端的出现改变了我们的生活方式,钡铼技术嵌入式工控机协助您灵活布建能源管理、大楼自动化、工业自动化、电动车充电站等各种多元性IoT应用&#xff…

IDEA 控制台中文乱码问题解决方法(UTF-8 编码)

设置 IDEA 编码格式 1:打开 IntelliJ IDEA>File>Setting>Editor>File Encodings,将 Global Encoding、Project Encoding、Default encodeing for properties files 这三项都设置成 UTF-8 2:将 vm option 参数改为: -…