【Redis】集群数据hash分片算法

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis】集群数据hash分片算法

集群模式下是如何找到数据的?

上文我们已经提到了Redis的集群模式会把数据分配在不同的集群模式下的不同的主节点上,那么他是以什么规则进行分配的,以及分配完毕之后是如何快速找找到数据的呢?

Redis Cluster将所有数据划分为16384个slot(槽位),每个节点负责其中一部分槽位,槽位的信息存储与每个节点中。

当Redis Cluster的客户端来连接急求你的时候,他会得到一份集群的槽位配置信息并将其缓存在客户端本地。

这样当客户端要查找某个key时,可以根据槽位定位算法定位到目标节点。

槽位定位算法

Cluster默认会对key值使用crc16算法进行hash得到一个整数值,然后用这个整数值对16384进行取模来得到具体槽位。

也就是 HASH_SLOT = CRC16(key) mod 16384

再根据槽位值与Redis节点的对应关系就可以定位到key具体在那个Redis节点上。

情况如下:

可以发现下面的数据在插入的时候会进行重定向,说明当前这个key应该存放在另一个节点中.

所以访问任何一个节点,都可以访问到所有的数据,因为他会自动的进行重定向.

使用方法

在分配完毕集群之后,槽位就已经被分配完毕了,那么对于一些特殊的业务,我们肯定希望所有的键值对都放在某一个特定的Redis服务器上,那么这时候就可以使用Redis提供的特殊符号 {} 来进行配置。

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

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

例如对于语句

set name lisi

那么就根据lisi进行计算,而对于下面这种

set {user}lisi

就是用user进行计算,计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值。

因此使用这种方式就能确保某些特定分组的key被分配到同一台的服务器上。


相关文章
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
204 2
|
10天前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
25天前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
|
2月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
153 3
|
2月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
3月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
|
11天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
13天前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
100 1
|
12天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
11天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
102 14

热门文章

最新文章