目录
Redis的集群模式和其优缺点
Redis的集群采用Redis 切片集群(Redis Cluster)方案,该方案把一个数据分散在多个节点上,降低对单节点的依赖,大大提高了数据的读写效率
Redis Cluster使用哈希槽(Hash Slot)来处理数据与节点的映射关系,一个切片集群共有16384个哈希槽,每一个键值对的key都会经过处理映射在对应的哈希槽中
分为两步:
1.把key经过CRC16算法得到一个16bit的值
2.把16bit的值对16384(哈希槽总数)取模,得到的模值就是映射key的位置
那么哈希槽是怎么映射到具体的redis节点中呢?
**1.平均分配:使用cluster create命令创建集群时,**把所有的哈希槽均匀分配给节点,如果有4个节点那么就由16384/4,来给每一个redis节点分配哈希槽
**2.手动分配:使用cluster meet命令创建节点之间的连接组成集群,**后续再手动的使用cluster addslot来手动配置哪一个集群的占用多少哈希槽
注意:手动分配时需要把16384个哈希槽分配完,否则集群不能正常工作

上图中的切片集群一共有 2 个节点,假设有 4 个哈希槽(Slot 0~Slot 3)时,我们就可以通过命令手动分配哈希槽,比如节点 1 保存哈希槽 0 和 1,节点 2 保存哈希槽 2 和 3。
优点缺点
优点:
1.高性能:redis切片集群,把数据分散在多个节点,减少单节点压力,让数据的读写提高,提升整体的吞吐量
2.高可用:redis主从同步机制让集群的主从节点的数据可以保证最终一致性,哪怕一个主节点挂掉还可以选举新的主节点,保证可用性
3.可扩展性强:redis可以自由添加或减少节点可扩展性比较强,集群中某些节点还可以做代理节点转发请求,增加数据的灵活度和可制定性
缺点:1.部署和维护比较复杂:redis集群的部署和维护需要考虑很多,主从配置、分片的规则、节点的布置,故障处理等需要较高的技术支持,实现比较复杂
2.数据同步问题:在数据同步时,某些节点挂掉后,数据同步会出现问题,数据量越大,读取的时间越久,就会有读写延迟
3.数据切片限制:因为数据分散在不同的节点,所以在对一个key进行多个操作时,可能会因为数据分散的原因导致操作失败
cluster集群客户端是怎样知道该访问哪个分片的?
cluster集群共有16384个哈希槽,客户端先与一个集群中的节点构建连接,会发送CLUSTER SLOTS命令得到所有哈希槽和节点的对应关系,再把这个关系缓存到本地
如果要根据key寻找到哈希槽,那么就要对key进行CRC16算法处理后再对16384取模,把结果拿到本地缓存的映射表中去查找就能找到对应的哈希槽
如果期间节点发生了改变(如节点下线,槽位迁移),节点会向客户端发送ASK或MOVED重定向命令,来告知客户端,从而修改本地的映射表,之后就可以根据新的映射表查找
总结:根据key到本地的映射表进行查找,如果节点有变更,就发送重定向命令,更新映射表,再查找,这就是切片透明访问的核心(对业务层透明)