本文是对(46条消息) Redis集群原理详解_张维鹏的博客-CSDN博客_redis集群工作原理文章的个人总结
文章目录
为什使用集群
有了哨兵,已经可以实现主节点自动切换,读写分离,但仍存在一些问题
1.写操作仍集中在主节点上,主节点压力过大,可能处理不了大量写请求。
2.主节点性能很好,但内存不足以存储大量数据。
而使用集群可以缓解这些问题,通过牺牲一致性来得到高可用。
集群数据分配
集群使用hash算法,将所有数据分配到16384个哈希槽中,然后使hash槽与节点相连,这种分配方式既能将数据合理的分配到各个节点中,又能实现数据与节点间解耦,避免hash槽动态分配时过于麻烦(只要重新分配hash槽到新节点就可以了)。
数据查询方式
每个客户端(Jedis或Lettuce)都会有一个hash槽与节点对应表
1.客户端依据hash算法和hash对应表找到key所在节点
2.向节点请求数据,如找到数据则返回,查找结束。
如hash槽已迁移到其他节点,则通过moved命令返回新的hash槽与节点对应关系,更新客户端对应表。
如hash槽正在迁移,则通过ask命令返会hash槽现在所在节点,不更新客户端对应表。
3.依据返回的对应关系重定向到新节点。
4.如找到数据则返回,否则跳出转到步骤1,最多重复5次。