CAP
CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立。
C:一致性,一致性指的是所有节点在同一时间的数据完全一致
A:可用性,可用性指服务一直可用,而且是正常响应时间
P:分区容错性,分区容错性指在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务
Redis集群实现AP
分区
分区方式分为哈希分区,顺序分区,redis使用的就是哈希分区
哈希分区:离散性好,数据分布与业务无关,无法顺序访问。
顺序分区:离散性易倾斜,数据分布与业务相关,可顺序访问。
常用哈希分区方式
节点取余分区,使用特定的数据,如Redis的建或用户ID,再根据节点数量N使用公司 hash(key)%N计算出哈希值 ,用于决定数据映射到拿一个节点,存在节点数量变化时如扩容或收缩节点数据节点性需要重新计算
可以用于数据库的分库分表规则,例如:订单表数据过多时我们可以根据商家来分表,这时候我们不能一个商家一个表,我们可以将根据商家ID来取余,假如商家ID主键是整型自增ID ,商家ID是随机数 n,那么n%10就是0~9中的一个数。无论n是多大的数,取余算出来的表都在10张表范围内
//java 取余公式
a%b=a-(a/b)*b
一致性的哈希分区
一致性哈希分区 每个节点分配一个token,范围在0~2的32次方 ,这个构成一个哈希环 然后顺时针找到一个大于等于该哈希值的token节点
虚拟槽分区
Redis Cluster 就是采用虚拟槽分区,虚拟槽被分为16384个槽,每个节点负责维护一部分槽(建议最大节点约为1000个节点)
例如分为5个节点,即可分为如下:
node-1,0-3276
node-2,3277-6553
node-3,6554-9830
node-4,9831-13107
node-5,13018-16383