# 哈希槽分区

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/18986.html | 发布：2023-03-28 | 更新：2023-03-28 | 分类：建站教程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aE16YC6T-1649930007495)(./picture/哈希槽分区.png)]

 

1.为什么出现？  
 哈希槽实质就是一个数组，数组[0,2^14 -1]形成hash slot空间。  
   
2.能干什么  
 解决均匀分配的问题，在数据和节点之间又加入了一层，把这层称为哈希槽（slot），用于管理数据和节点之间的关系，现在就相当于节点上放的是槽，槽里放的是数据。

 

槽解决的是粒度问题，相当于把粒度变大了，这样便于数据移动。  
哈希解决的是映射问题，使用key的哈希值来计算所在的槽，便于数据分配。  
   
3.多少个hash槽  
一个集群只能有16384个槽，编号0-16383（0-2^14-1）。这些槽会分配给集群中的所有主节点，分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。解决了节点和槽的关系后，接下来就需要对key求哈希值，然后对16384取余，余数是几key就落入对应的槽里。slot = CRC16(key) % 16384。以槽为单位移动数据，因为槽的数目是固定的，处理起来比较容易，这样数据移动问题就解决了。

 

哈希槽计算:  
Redis 集群中内置了 16384 个哈希槽，redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在 Redis 集群中放置一个 key-value时，redis 先对 key 使用 crc16 算法算出一个结果，然后把结果对 16384 求余数，这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽，也就是映射到某个节点上。如下代码，key之A 、B在Node2， key之C落在Node3上

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
