Redis 切片集群

什么是横向扩展,纵向扩展

横向扩展:以多机组成一个集群,依靠集群的整体力量

纵向扩展:增加单机的资源配置(cpu,内存,磁盘等)

横向还是纵向

纵向优点:

  1. 简单

纵向缺点:

  1. 硬件天花板,当前最大的单条内存应该是64GB
  2. 需要停机更新配置

横向优点:

  1. 不需要停机
  2. 总体的配置没有上限(640GB = 32GB * 20)

横向缺点,在于要解决如下几个问题点:

  1. 数据如何分布到不同的实例上
  2. 客户端如何找到对应的实例获取数据
redis Cluster

又称为切片集群,将总体数据分散到不同的实例上去存储。
一个集群分为16384个槽(hash slot),这些槽分布到不同的实例中去,槽中存具体数据。

reids hash slot 如何分配
  1. 通过 cluster create 创建集群的话,假设有N台实例,则按 16384/N 分配

  2. 如果通过cluster meet 手动建立实例之间的连接形成集群的话,需要通过 cluster addslots 指定具体的hash slot。手动的情况下要分完16384个槽(redis 集群才能正常工作)

数据如何查找
  1. 集群和客户端建立连接后,会把槽的相关信息存在客户端
  2. 客户端对key进行CRC16运算后得到CV
  3. 进行取模得到槽值CZ(CV%16384)
  4. 根据1中的相关信息去对应的实例的槽上获取数据

上面是不是看着挺完美,其实还有一些细节:

  1. 由于实例的增加或者删除,槽可能会改变位置。
    由于负载均衡(让数据分配的更均匀),槽可能会改变位置。

  2. 4去实例上获取数据时,假设这个实例叫做A,A有可能存在如下情况。

第一种情况:A已经完成往B的迁移,这时A上找不到数据,返回B的信息(客户端更新槽的相关信息,让其下次知道去B),让其重新去B查找。

第二种情况:A迁移部分,A上找不到,返回客户端ASK命令(包含B的信息),客户端向B发送ASKING命令,让B暴露未完全迁移的部分,供客户端查找。此情况下客户端不更新槽的相关信息。

第三种情况: 未迁移或迁移部分能找到数据,按正常逻辑走。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值