虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。Redis Cluster槽的范围是0 ~ 16383。槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,每个节点负责一定数量的槽。
卡槽中的数据,在有节点数量变化的时候,卡槽会重新分配,那么卡槽会移动,卡槽中的数据会跟随卡槽移动,也就是每个卡槽中对应的数据不会更改;
对比集群:
当主节点挂掉之后,从节点会变成主节点,然后 当挂掉的主节点再次启动之后,会自动变为从节点;
而 对于哨兵模式, 在挂掉的主节点再次启动后,会有主从复制不同步的问题,还要修改它的配置文件,并指向主节点;
所以,redis的集群模式相对来说更加智能,自动化,无需人为干预;
卡槽的扩容与缩容:
扩容就是多了一个或者多个master,那么可以选择某种方式(平均分配/指定分配),将卡槽分配到新增的master节点;
缩容就是将卡槽从某个master节点移除,移动到某个或者某些节点
为什么当用redis集群的时候,为什么只要连接一个服务器就能获取到所有集群的key呢?
其实每次在set key 的时候,都会首先通过哈希槽的计算,然后将key存入
在查询key的时候,也是先计算这个key对应的哈希槽,然后通过集群,找到这个槽所在的redis节点,从而定位到redis,然后获取这个key;
redis集群搭建~~~