Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便
Redis3 之前的集群问题
redis就像一个箱子,里面放着N个 {key,value} 信息
一个箱子肯定会有满的时候,就需要再加一个箱子,后续可能会加N个箱子 新建key时应该放入哪个箱子?
要取某个key时,怎么知道它在哪个箱子里呢? 这就需要定义一个规则来确定key的位置 例如使用hash值取模的方式
但这个计算操作需要我们自己来处理,比较麻烦 而且,有些情况也会更复杂,例如 添加、删除redis节点时如何处理?
Redis3 cluster 特点
(1)像操作单个redis一样操作key,不用操心key在哪个节点上 (2)在线动态添加、删除redis节点,不用停止服务 (3)根据节点性能,动态分配不同数量的key到不同redis节点
(4)每个节点都配有slave,并自动监测和切换
Redis3 cluster 核心思路
Redis3 cluster 中增加了一个重要概念:
hash slot(哈希槽),共有16384个slot key不是直接放入redis中了,而是放入slot中,再把slot放入redis中 可以理解为:
之前是把key直接放入箱子中,现在是先把一部分key放入一个小盒子,然后再把一堆小盒子放入一个箱子
根据key的hash值计算其所在的slot,再根据slot和redis节点的对应关系,找到此slot所在的节点,然后到这个节点对key进行操作
操作示例
(1)读写key
(2)添加redis节点 例如现有3个redis节点,每个节点各负责一半数量的slot,16384/3 = 5461个 现在想添加一个redis节点,可以从 节点1、节点2、节点3 中各拿出一部分的slot,移到新节点 每个redis节点中的slot数量可以不一致,根据节点性能适当分配