Redis Cluser
使用此种分区规则
- 哈希分区和顺序分区对比
- 分布式存储数据分区图
Redis
的键或用户ID
,再根据节点数量N
使用公式:hash(key)%N
计算出哈希值,用来决定数据映射到哪个节点上
- 翻倍扩容迁移约50%数据
token
,范围通常在0~232,这些token
构成一个哈希环。数据读写执行节点查找操做时,先根据key
计算hash
值,而后顺时针找到第一个大于等于该哈希值的token
节点
- 一致性哈希数据分布
Redis Cluser
使用此种分区类型Redis Cluster
槽范围是0~16383。槽是集群内数据管理和迁移的基本单位。采用大范围槽的主要目的是为了方便数据拆分和集群扩展
- 槽集合与节点关系
Redis
数据分区Redis Cluser
采用虚拟槽分区, 全部的键根据哈希函数映射到0~16383
整数槽内, 计算公式: slot=CRC16(key) &16383
。 每个节点负责维护一部分槽以及槽所映射的键值数据
- 使用CRC16(key) &16383将键映射到槽上
Redis
集群功能限制Redis
集群相对单机在功能上存在一些限制
key
批量操做支持有限。如mset
、 mget
, 目前只支持具备相同slot
值的key
执行批量操做。 对于映射为不一样slot
值的key
因为执行mget
、 mget
等操做可能存在于多个节点上所以不被支持key
事务操做支持有限,只支持多key
在同一节点上的事务操做,当多个key
分布在不一样的节点上时没法使用事务功能key
做为数据分区的最小粒度, 所以不能将一个大的键值对象如hash
、 list
等映射到不一样的节点Redis
能够支持16
个数据库, 集群模式下只能使用一个数据库空间, 即db0
Redis Cluster
很是有帮助