简介
在生产环境中,我们希望Redis可以支持以下特性:
- 高可用:时刻保证Redis服务可用,降低单节点宕机带来的损失
- 可拓展:随着数据的增多,可以通过简单的增加节点来实现横向扩展
Redis的主从复制与Sentinel相结合可以实现高可用,解决了扩展读的问题,但仍然是一个单实例Redis,没有解决扩展写问题,Redis Cluster便是官方给出的解决方案。
原理
Redis Cluster数据分片没有使用 consistent hashing(一致性哈希),而是使用了一种称之为 hash slot(哈希槽)的新方式。
在Redis Cluster中共有16384(2^14^)个 hash slot,使用key值对应的CRC16码与16384做模运算,然后将value放置到相应的slot中。这16384个 hash slot 会均匀分布在Cluster的所有节点上,如一个包含三个Node的Cluster:
- NodeA包含0-5500个哈希槽
- NodeB包含5501-11000个哈希槽
- NodeC包含11001-16383个哈希槽
哈希槽的方式使得Cluster添加或者移除Node更为简单,如添加一个新Node D,只需要从A、B、C移除一些哈希槽到D中;删除Node A,只需要把A的哈希槽移动到B、C中。