横向扩展:以多机组成一个集群,依靠集群的整体力量
纵向扩展:增加单机的资源配置(cpu,内存,磁盘等)
纵向优点:
纵向缺点:
横向优点:
横向缺点,在于要解决如下几个问题点:
又称为切片集群,将总体数据分散到不同的实例上去存储。
一个集群分为16384个槽(hash slot),这些槽分布到不同的实例中去,槽中存具体数据。
通过 cluster create 创建集群的话,假设有N台实例,则按 16384/N 分配
如果通过cluster meet 手动建立实例之间的连接形成集群的话,需要通过 cluster addslots 指定具体的hash slot。手动的情况下要分完16384个槽(redis 集群才能正常工作)
上面是不是看着挺完美,其实还有一些细节:
由于实例的增加或者删除,槽可能会改变位置。
由于负载均衡(让数据分配的更均匀),槽可能会改变位置。
4去实例上获取数据时,假设这个实例叫做A,A有可能存在如下情况。
第一种情况:A已经完成往B的迁移,这时A上找不到数据,返回B的信息(客户端更新槽的相关信息,让其下次知道去B),让其重新去B查找。
第二种情况:A迁移部分,A上找不到,返回客户端ASK命令(包含B的信息),客户端向B发送ASKING命令,让B暴露未完全迁移的部分,供客户端查找。此情况下客户端不更新槽的相关信息。
第三种情况: 未迁移或迁移部分能找到数据,按正常逻辑走。