解决了啥

  • 一个 key 过来,会经过 CRC16 校验后对 16384 进行取模来决定放置到那个槽位
    • 比如下面的三主,每个主节点会分别存放 0-5000, 5001-11000, 10001-16384 的槽
  • 进行容量扩容,集群一般是三主三从
    • 三个主保存所有的数据,而各个主都有自己的从
    • 如果某个主挂了,那么从就代替主
    • 如果一对主从全部挂了,那么整个集群就不可用了
      • 因为这样宏观上就丢失了三分之一的数据了

集群是不是用 cluster 就ok了?

  1. cluster 是 redis3.0 后推出的,如果一些公司有自己的 redis3.0 之前的一套高可用的集群方案,那么迁移 cluster 是不太可取的
  2. cluster 使用了网状网络通信,在 Gossipl 阶段会产生大量的 PING/PONG 流量,即使 redis 4.0 后进行了优化,但是还会可能因为这些不必要的流量导致网卡占满
  3. 节点动态扩容时,可能因为数据迁移失效,导致同名 key 会同时存在两个节点中,redis 4.0 之前会导致主进程被阻塞,生产环境中是灾难的