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节点:对应的插槽

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

 

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

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

相关文章

LDD学习笔记 -- Linux错误码

LDD学习笔记 -- Linux错误码 EACCES(Permission Denied) 13EEXIST(File Exits) 17EINVAL(Invalid Argument) 22ENOENT(No Such File or Directory)ENOMEM(Out of Memory)EIO(Input/Output Error) 5ENOSPC(No space Left on Device)ENOTTY(Not a Typewrite)EPIPE(Broken Pipe)EI…

使用邮箱发送验证码前端完成登录

前言 在前一篇使用C#发送邮箱验证码已经完成使用.net core web api写了完成往登录邮箱发送验证码的接口。现在就用前端调用接口模拟登录功能。 接口 public class ApiResp{public bool Success { get; set; }public int Code { get; set; }public int count { get; set; }pu…

元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata

大家好,我是独孤风。元数据管理平台层出不穷,但目前主流的还是Atlas、Datahub、Openmetadata三家,那么我们该如何选择呢? 本文就带大家对比一下,这三个平台优势劣势。要了解元数据管理平台,先要从架构说起。 正文共&am…

【北邮国院大四上】Business Technology Strategy 企业技术战略

北邮国院电商大四在读,本笔记仅为PPT内容的整理与翻译,并不代表本课程的考纲及重点,仅为本人复习时方便阅读与思考之作。 写在前面 大家好,欢迎来到大学期间的最后一门课程,本门课程是中方课,所以很庆幸的…

【Apollo】阿波罗使用占位符 #{} 的异常分析

文章目录 1. 前言2. 复现3. 分析3.1 Value 注解3.2 根因 4. 后记5. 参考资料 1. 前言 出于线上 hotfix 报文请求模板的考虑,新增一个阿波罗配置,取值形如: 发布配置一段时间后,刚好需要重启服务,最终造成服务宕机&a…

在Ubuntu22.04上安装WordPress

WordPress是当今最简单、最强大的博客和网站建设工具。据统计全球大约有40% 以上网站是使用WordPress,这是个巨大的数字也侧面证明了WordPress的强大和普遍性。因此,如果你正在寻找一款高效、实用、可靠的CMS工具来构建网站,那么WordPress无疑…

关于HAL库外部中断的开关流程

通过HAL库配置好外部中断后,会生成如下代码: static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOD_CLK_…

self-attention(上)李宏毅

B站视频链接 word embedding https//www.youtube.com/watch?vX7PH3NuYW0Q self-attention处理整个sequence,FC专注处理某一个位置的资讯,self-attention和FC可以交替使用。 transformer架构 self-attention的简单理解 a1-a4可能是input也可以作为中…

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply,call,bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适,因为这三个函数是被函数对象调用的,并且每个函数都可以调用,所以不难想到有一个位置非常合适,…

springboot第47集:【思维导图】面向对象,关键字,标识符,变量,数组的使用...

关键字:class,public,static,void等,特点是全部关键字都是小写字母。 image.png image.png 凡是自己起的名字可以叫标识符 image.png image.png image.png image.png 整数类型的使用 image.png image.png image.png 浮点类型 image.png image.png 字符类…

用队列实现栈oj题——225

. 个人主页:晓风飞 专栏:LeetCode刷题|数据结构|Linux 路漫漫其修远兮,吾将上下而求索 文章目录 题目要求:实现 MyStack 类:注意:示例:解释:提示: 解题核心数据结构的定义…

ASP.NET Core基础之图片文件(二)-WebApi图片文件上传到文件夹

阅读本文你的收获: 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中,学习了如何获取WebApi中的静态图片,本文继续分享如何上传图片。 那么…

Python点云处理(二十一)基于Gradient Boosting的点云分类算法

目录 0 简述1 Gradient Boosting2 点云特征向量构建3 用Gradient Boosting进行分类4 代码实现5 结果展示0 简述 点云分类是计算机视觉领域中的一个重要任务,其主要目标是将三维空间中的点云数据划分为不同的类别。点云是由大量的三维点组成的数据集,通常由激光雷达或结构光等…

uniapp 微信小程序跳转外部链接

一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…

编程天赋和努力哪个更重要?

编程天赋和努力在编程中都非常重要,但它们的侧重点不同。 编程天赋通常指的是与生俱来的、在逻辑思维、抽象思维、创造力等方面的能力,这些能力可以帮助程序员更快地理解问题、更高效地设计和实现解决方案。天赋的确可以帮助程序员更容易地入门和更快地掌…

[通俗易懂]c语言中指针变量和数值之间的关系

一、指针变量的定义 在C语言中,指针变量是一种特殊类型的变量,它存储的是另一个变量的内存地址。指针变量可以用来间接访问和操作内存中的其他变量。指针变量的定义如下: 数据类型 *指针变量名;其中,数据类型可以是任…

联邦学习中聚合算法可能怎样创新,智慧农业结合什么数学理论或知名理论实现创新并发表文章

目录 联邦学习中聚合算法可能怎样创新 智慧农业结合什么数学理论或知名理论实现创新并发表文章

什么是集合

在数学中,集合是由一些确定的对象组成的整体。这些对象称为集合的元素, 在Java中,集合(Collection)是一种用来存储和操作一组对象的容器。Java提供了多个集合类和接口,位于java.util包中,用于处…

深度解析基于模糊数学的C均值聚类算法

深度解析基于模糊数学的C均值聚类算法 模糊C均值聚类 (FCM)聚类步骤:FCM Python代码: 模糊C均值聚类 (FCM) 在数据挖掘和聚类分析领域,C均值聚类是一种广泛应用的方法。模糊C均值聚类(FCM)是C均值聚类的自然升级版。相…