四十七、Redis分片集群

news/2025/2/5 0:42:12/

目录

一、分片集群结构

二、散列插槽

1、Redis如何判断某个key应该在哪个实例?

2、如何将同一类数据固定的保存在同一个Redis实例?

三、集群伸缩

四、故障转移

1、当集群中有一个master宕机时

(1)自动转移

(2)手动转移

五、RedisTemplate访问分片集群


一、分片集群结构

主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

海量数据存储问题
高并发写的问题

使用分片集群可以解决上述问题,分片集群特征:

集群中有多个 master ,每个 master 保存不同数据
每个 master 都可以有多个 slave 节点
master 之间通过 ping 监测彼此健康状态
客户端请求可以访问集群任意节点,最终都会被转发到正确节点

二、散列插槽

Redis会把每一个master节点映射到0~1638316384个插槽(hash slot)上,查看集群信息时就能看到:(每个节点分配一部分插槽

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

key 中包含 "{}" ,且“ {} ”中至少包含 1 个字符,“ {} ”中的部分是有效部分
key 中不包含“ {} ”,整个 key 都是有效部分

例如:keynum,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值。

1、Redis如何判断某个key应该在哪个实例?

16384 个插槽分配到不同的实例
根据 key 的有效部分计算哈希值,对 16384 取余
余数作为插槽,寻找插槽所在实例即可

2、如何将同一类数据固定的保存在同一个Redis实例?

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

三、集群伸缩

集群命令

可以创建新的master节点和slave节点

四、故障转移

1、当集群中有一个master宕机时

(1)自动转移
  1. 首先是该实例与其它实例失去连接
  2. 然后是疑似宕机
  3. 最后是确定下线,自动提升一个slave为新的master
(2)手动转移

输入命令即可

手动的Failover支持三种不同模式:

缺省:默认的流程,如图 1~6步
force :省略了对 offset 的一致性校验
takeover :直接执行第5步,忽略数据一致性、忽略master 状态和其它 master 的意见

五、RedisTemplate访问分片集群

RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:

1. 引入 redis starter 依赖
2. 配置分片集群地址
3. 配置读写分离

与哨兵模式相比,其中只有分片集群的配置方式略有差异,如下:

spring:redis:cluster:nodes: # 指定分片集群的每一个节点信息- 192.168.150.101:7001- 192.168.150.101:7002- 192.168.150.101:7003- 192.168.150.101:8001- 192.168.150.101:8002- 192.168.150.101:8003


http://www.ppmy.cn/news/1271166.html

相关文章

现代雷达车载应用——第2章 汽车雷达系统原理 2.6节 雷达设计考虑

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.6 雷达设计考虑 上述部分给出了汽车雷达基本原理的简要概述。在雷达系统的设计中,有几个方面是必不可少的,它们决定了雷达系…

Lua 模仿C++类

Lua类的声明与定义 在文件中"AInfoClass.lua"声明并定义一个Lua类。 local AInfoClass {}function AInfoClass.New(id)local tempTab {}tempTab.id idsetmetatable(tempTab, {__index AInfoClass})tempTab:InitClass()return tempTab endfunction AInfoClass:I…

高压电气是什么

高压电气 电工电气百科 文章目录 高压电气前言一、高压电气是什么二、高压电气的类别三、高压电气的作用原理总结前言 高压电气在电力系统中起着重要的作用,它能够将电能有效地输送和分配到各个用户,为社会和工业生产提供稳定可靠的电力供应。然而,高压电气系统也需要注意安…

最新50万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题;花了3个月的时间将市面上所有的面试题整理总结成了一份50万字的300道Java高频面…

【Jmeter】Jmeter基础5-Jmeter元件介绍之线程(用户)

2.5.1、线程组 一个线程组即一个虚拟用户组,线程组中的每个线程即为1个虚拟用户,每个线程互相隔离,互不影响参数说明: 在取样器错误后要执行的动作 继续:忽略错误,继续执行启动下一进程循环: 终…

jmeter,读取CSV文件数据的循环控制

1、构造csv数据 保存文件时需要注意文件的编码格式 id,name,limit,status,address,start_time 100,小米100,1000,1,某某会展中心101,2023/8/20 14:20 101,小米101,1001,1,某某会展中心102,2023/8/21 14:20 2、在线程组下添加【CSV数据文件设置】元件 3、CSV文件数据的循环控…

2 - Electron 核心概念

Electron 核心概念 主进程 通过Node.js、Electron提供的API与系统底层打交道启动项目时运行的 main.js 脚本就是我们说的主进程。在主进程运行的脚本可以以创建 Web 页面的形式展示 GUI。主进程只有一个 渲染进程 每个 Electron 的页面都在运行着自己的进程,这样…

Kafka Avro序列化之一:使用自定义序列化

定义Schema 通过 Apache Avro编程快速入门,我们定义了User实体类。 user.avsc {"namespace": "org.example.avro","type": "record","name"