redis cluster采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:slot=CRC16(key) &16383.每个节点负责维护一部分槽以及槽所映射的健值数据
Redis虚拟槽分区的特点:
.解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
.节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据
.支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。
数据分区是分布式存储的核心,理解和灵活运用数据分区规则对于掌握redis cluster非常有帮助。
Redis集群相对于单机在功能上存在一些限制,如下:
1)key 批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作,对于映射为不同slot值的key由于执行mget、mset等操作可能存在于多个节点上因此不被支持
2)key事务操作支持有限,同理支持多个key在同一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能。
3)key作为数据分区的最小粒度,因此不能将一个大的健值对象如hash、list等映射到不同的节点。
4)不支持多数据库空间,单机下的redis可以支持16个数据,集群模式下只能使用一个数据库空间,即db0
5) 复制结构支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。