redis的分片集群模式

redis的分片集群模式

1 主从哨兵集群的问题和分片集群特点

主从哨兵集群可应对高并发写和高可用性,但是还有2个问题没有解决:
(1)海量数据存储
(2)高并发写的问题
使用分片集群可解决,分片集群的特点:
(1)集群中有多个master,每个master保存不同的数据。(实现海量数据存储)
(2)每个master都可以有多个slave节点。(实现高并发读)
(3)master之间通过ping检测彼此健康状态。(替代主从集群中的哨兵,多个master认为某个master客观下线,可在每个master和自己的slave节点之间进行主从切换,满足高可用性)
(4)客户端请求(redisTemplate)可以访问集群任意节点,最终都会被转发到正确的节点。

在这里插入图片描述

2 搭建redis分片集群

分片集群需要的节点数较多,搭建一个最小的分片集群,包含3个master节点,每个master节点包含一个slave节点。采用一主一从模式,总共3个master和3个slave节点。
可在同一个虚拟机中开启6个redis实例,模拟分片集群。

编写redis.conf文件:
在这里插入图片描述

(1)分别启动6个redis

(2)创建集群

# 分片集群操作相关的命令
redis-cli --cluster help# 创建集群
redis-cli --cluster create --cluster-replicas 1 节点ip:端口号  节点ip2:端口号   ......  节点ip6:端口号

create:创建集群
–cluster-replicas 1:指定集群中每个master的副本个数为1,节点总数(6)除以(1+1)= 3 ,说明maste的数量为3,因此节点列表的前3个就是master节点,其余是slave节点,随机分配到不同的master上。

# 查看集群状态
redis-cli -p 端口号 cluster nodes
## 展示各个节点

在这里插入图片描述

3 分片集群中的散列插槽

散列插槽(设计目的:有利于数据的转移)

redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上,查看集群信息时就能看到:(每一个master节点都会占用一部分的插槽)。
数据key不是与节点绑定的,而是与插槽绑定。redis会根据key的有效部分计算出插槽值,有以下2种情况:
(1)key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分
(2)key中不包含“{}”,整个key都是有效部分。

例如:key是num,就会根据num计算;如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余(取余的结果始终在0~16383中间),得到的结果就是slot值。

# 使用集群模式  连接redis,set值(-c)
redis-cli -c -p 7001

set a 1的时候 a的计算结果的slot(插槽)等于15495,会自动跳转到存储到这个redis的散列插槽中。
在这里插入图片描述

如何实现将某一类数据都存储到指定的redis的主节点上

这一类数据可以使用相同的有效部分,例如key都以{typeId}为前缀。

4 分片集群中的集群伸缩

集群伸缩:增加和删除集群中节点

向集群中增加一个新的master节点,并向num=10

需求:
将已有的那个redis实例的插槽移动到新增master节点的插槽中,将已有的那个redis实例下线(如:服务器老登)

# 
redis-cli --cluster --help
# 默认是master节点,当然再在后面使用指定是master还是slave以及是谁的slave,添加新的redis实例节点默认是没有插槽值的 (在connected后面的是slot插槽)
redis-cli --cluster add-node 新增节点的ip:端口号 redis分片集群中已有的ip:端口号
# 重新分片 reshard 从其他节点的插槽中移到指定节点的部分插槽值   按照提示一步一步操作  注意填入redis实例的id(可使用cluster nodes查看)
redis-cli --cluster reshard

5 分片集群中的故障转移

其中一个master宕机(可以主动停机)–自动故障转移

# 停机后 该节点断开连接  从节点变为master节点  该节点重启后,变为slave节点
redis-cli -p 端口号 shutdown

手动故障转移(一个redis实例节点服务器老旧需要升级)–数据迁移

将某个slave节点机器替换现在的master节点
在slave节点的机器上执行cluster failover命令

# 可让当前slave节点成为master节点,之前的master节点变为slave节点
cluster failover

6 redisTemplate访问分片集群

(1)引入redis的starter依赖

(2)配置文件中配置redis分片集群的每个节点的地址

在这里插入图片描述

(3)配置主从读写分离

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

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

相关文章

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

①. ThreadLocal简介 ①. ThreadLocal是什么 ①. ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145356022 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Scalin…

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合&#xff0c;体现了现代前端开发的三大趋势&#xff1a; 响应式编程&#xff1a;通过Vue 3的Composition API实现细粒度响应 类型安全&#xff1a;约60%的组件采用TypeScript编写 原子化…

计算机组成原理(2)王道学习笔记

数据的表示和运算 提问&#xff1a;1.数据如何在计算机中表示&#xff1f; 2.运算器如何实现数据的算术、逻辑运算&#xff1f; 十进制计数法 古印度人发明了阿拉伯数字&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#…

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…

AI如何帮助解决生活中的琐碎难题?

引言&#xff1a;AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙&#xff0c;到了公司才想起昨天的会议资料没有打印&#xff0c;或者下班回家还在纠结晚饭吃什么&#xff1f;这些看似微不足道的小事&#xff0c;往往让人疲惫不堪。而如今&a…

一分钟搭建promehteus+grafana+alertmanager监控平台

为什么要自己搭建一个监控平台 平时进行后端开发&#xff0c;特别是微服务的后端可开发&#xff0c;一定少不了对接监控平台&#xff0c;但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试&#xff0c;这里我使用docker-compose搭建了一个…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…

前端【10】jQuery DOM 操作

目录 jquery捕获查取 获得内容 - text()、html() 以及 val() 获取属性 - attr() ​编辑 jQuery 修改/设置内容和属性 设置内容 - text()、html() 以及 val() 设置属性 - attr() jQuery添加元素 jQuery - 删除元素 前端【9】初识jQuery&#xff1a;让JavaScript变得更简…

进程控制的学习

目录 1.进程创建 1.1 fork函数 1.2 fork函数返回值 1.3 写时拷贝 1.4 fork 常规用法 1.5 fork 调用失败的原因 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 2.2.1 从main 返回 2.2.2 echo $&#xff1f; 查看进程退出码 2.2.2.1 我们如何得到退出码代表的含…

数据结构与算法分析:专题内容——人工智能中的寻路7之AlphaBeta(代码详解)

一、算法描述 在考虑到对手的可能走法之后&#xff0c;Minimax算法能够较为恰当地找出玩家的最优走法。但是&#xff0c;在生成博弈树时&#xff0c;这个信息却没有使用&#xff01;我们看看早先介绍的BoardEvaluation评分函数。回忆一下下图Minimax的探测&#xff1a; 这是从…

12、本地缓存分布式缓存(未完待续)

1、哪些数据适合放入缓存&#xff1f; 即时性、数据一致性要求不高的访问量大且更新频率不高的数据&#xff08;读多&#xff0c;写少&#xff09; 2、本地缓存 1、本地缓存&#xff0c;如果是单体项目&#xff0c;部署到一台服务器上&#xff0c;就不存在什么问题&#xff…

Linux——网络基础(1)

文章目录 目录 文章目录 前言 一、文件传输协议 应用层 传输层 网络层 数据链路层 数据接收与解封装 主机与网卡 数据传输过程示意 二、IP和MAC地址 定义与性质 地址格式 分配方式 作用范围 可见性与可获取性 生活例子 定义 用途 特点 联系 四、TCP和UDP协…

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…

阿里前端开发规范

文章目录 1. 为什么前端写代码要规范&#xff1f;一、代码规范的必要性二、 规范带来的好处 2. 资源一、推荐 1. 为什么前端写代码要规范&#xff1f; 一、代码规范的必要性 可维护性 统一的代码风格便于理解和修改减少代码维护成本降低项目交接难度 团队协作 提高团队开发效…

Linux 小火车

1.添加epel软件源 2.安装sl 3. 安装完成后输入&#xff1a; sl

高效流式大语言模型(StreamingLLM)——基于“注意力汇聚点”的突破性研究

论文地址&#xff1a;https://arxiv.org/pdf/2309.17453 github地址&#xff1a;https://github.com/mit-han-lab/streaming-llm 1. 研究背景与挑战 随着大语言模型&#xff08;LLMs&#xff09;在对话系统、文档摘要、代码补全和问答等领域的广泛应用&#xff0c;如何高效且准…

STM32-时钟树

STM32-时钟树 时钟 时钟