一文读懂 Redis 集群:从哈希槽到透明访问

目录

Redis的集群模式和其优缺点

那么哈希槽是怎么映射到具体的redis节点中呢?

优点缺点

cluster集群客户端是怎样知道该访问哪个分片的?


Redis的集群模式和其优缺点

Redis的集群采用Redis 切片集群(Redis Cluster)方案,该方案把一个数据分散在多个节点上,降低对单节点的依赖,大大提高了数据的读写效率

Redis Cluster使用哈希槽(Hash Slot)来处理数据与节点的映射关系,一个切片集群共有16384个哈希槽,每一个键值对的key都会经过处理映射在对应的哈希槽中

分为两步:

1.把key经过CRC16算法得到一个16bit的值

2.把16bit的值对16384(哈希槽总数)取模,得到的模值就是映射key的位置

那么哈希槽是怎么映射到具体的redis节点中呢?

**1.平均分配:使用cluster create命令创建集群时,**把所有的哈希槽均匀分配给节点,如果有4个节点那么就由16384/4,来给每一个redis节点分配哈希槽

**2.手动分配:使用cluster meet命令创建节点之间的连接组成集群,**后续再手动的使用cluster addslot来手动配置哪一个集群的占用多少哈希槽

注意:手动分配时需要把16384个哈希槽分配完,否则集群不能正常工作

上图中的切片集群一共有 2 个节点,假设有 4 个哈希槽(Slot 0~Slot 3)时,我们就可以通过命令手动分配哈希槽,比如节点 1 保存哈希槽 0 和 1,节点 2 保存哈希槽 2 和 3。

优点缺点

优点:

1.高性能:redis切片集群,把数据分散在多个节点,减少单节点压力,让数据的读写提高,提升整体的吞吐量

2.高可用:redis主从同步机制让集群的主从节点的数据可以保证最终一致性,哪怕一个主节点挂掉还可以选举新的主节点,保证可用性

3.可扩展性强:redis可以自由添加或减少节点可扩展性比较强,集群中某些节点还可以做代理节点转发请求,增加数据的灵活度和可制定性
缺点:

1.部署和维护比较复杂:redis集群的部署和维护需要考虑很多,主从配置、分片的规则、节点的布置,故障处理等需要较高的技术支持,实现比较复杂

2.数据同步问题:在数据同步时,某些节点挂掉后,数据同步会出现问题,数据量越大,读取的时间越久,就会有读写延迟

3.数据切片限制:因为数据分散在不同的节点,所以在对一个key进行多个操作时,可能会因为数据分散的原因导致操作失败

cluster集群客户端是怎样知道该访问哪个分片的?

cluster集群共有16384个哈希槽,客户端先与一个集群中的节点构建连接,会发送CLUSTER SLOTS命令得到所有哈希槽和节点的对应关系,再把这个关系缓存到本地

如果要根据key寻找到哈希槽,那么就要对key进行CRC16算法处理后再对16384取模,把结果拿到本地缓存的映射表中去查找就能找到对应的哈希槽

如果期间节点发生了改变(如节点下线,槽位迁移),节点会向客户端发送ASK或MOVED重定向命令,来告知客户端,从而修改本地的映射表,之后就可以根据新的映射表查找

总结:根据key到本地的映射表进行查找,如果节点有变更,就发送重定向命令,更新映射表,再查找,这就是切片透明访问的核心(对业务层透明)

相关推荐
m0_635647481 小时前
Qt开发与MySQL数据库教程(二)——MySQL常用命令以及示例
java·开发语言·数据库·mysql
顶点多余1 小时前
数据库——对表的操作
数据库
DeepModel1 小时前
【概率分布】t分布详解
算法·概率论
程序员榴莲1 小时前
MySQL (一):MySQL的安装与启动
数据库·mysql
CoovallyAIHub1 小时前
ICLR 2026 | 慕尼黑工大院士Navab团队联合MVTec提出FoundAD,用基础视觉编码器实现少样本异常检测
人工智能·算法·计算机视觉
仰泳的熊猫1 小时前
题目2266:蓝桥杯2015年第六届真题-打印大X
数据结构·c++·算法·蓝桥杯
⑩-1 小时前
@Vaild
java·javaee
咖啡の猫1 小时前
Redis 通用命令
数据库·redis·bootstrap
Han.miracle1 小时前
Spring Boot 后端分层开发实战:从 MVC 到三层架构详解
java