redis请求路由
redis3.0后官方集群方案 节点路由通过哈希槽实现
在介绍哈希槽之前,先带着几个问题进入,正所谓,深入一点,会更美好。
- 有几种常用的路由算法
- 哈希槽具体怎么实现
- 为什么redis要选择哈希槽
首先,我们来看 有几种常用的路由算法
按范围路由
例如:有1——100的key,A,B,C,D四个节点。按key值将1——25分布到A节点,26——50分布到B节点,51——75分布到C节点,76——100分布到D节点。
这个算法策略有几个限制:
- 因为是顺序范围的,所以key必须是数字。
- 节点分配不够灵活。新增删除是需要大量转移。
- 可能会造成热点节点的问题,因为是按真实的key值,可能会存在某段key值相对集中,而其他段key值很松散。举个例子有1,6,11,16,17,18,19,20。这个8个key值,从1——20,按范围分布到4个节点,则1落到A节点。6落到B节点。11落到C节点。而16,17,18,19,20全部集中落到D节点。这样就造成了热点节点的问题。
hash后按节点取模
这种路由算法策略,通过将key值做hash后变为数值,然后将这个数值与节点数取模,从而判断具体key应该存放到哪个节点上。
相对于 按范围路由 有几个优点