1、集群分片模式

如果 redis 只用复制功能做主从,那么当数据量巨大的情况下,单机情况下可能已经承受不下一份数据,更不用说是主从都要各自保存一份完整的数据。在这种情况下,数据分片是一个非常好的解决办法。

redis 的 custer 正是用于解决该问题。它主要提供两个功能:

1、自动对数据分片,落到各个节点上
2、即使集群部分节点失效或者连接不上,依然可以继续处理命令

对于第二点,它的功能有点类似于 sentienl 的故障转移,在这里不细说。下面详细了解下 redis 的槽位分片原理,在此之前,先了解下分布式简单哈希算法和一致性哈希算法,以帮助理解槽位的作用。

2、简单哈希算法

假设有三台机,数据落在哪台机的算法为:

c = Hash(key) % 3

例如 key A 的哈希值为4,4 % 3 = 1,则落在第二台机。Key ABC 哈希值为11,11 % 3 = 2,则落在第三台机上。

利用这样的算法,假设现在数据量太大了,需要增加一台机器。A 原本落在第二台上,现在根据算法4 % 4 = 0,落到了第一台机器上了,但是第一台机器上根本没有 A 的值。这样的算法会导致增加机器或减少机器的时候,引起大量的缓存穿透,造成雪崩

3、一致性哈希算法

在1997年,麻省理工学院的 Karger 等人提出了一致性哈希算法,为的就是解决分布式缓存的问题。

在一致性哈希算法中,整个哈希空间是一个虚拟圆环。从 0 ~ 2^32-1 代表的分别是一个个的节点,这个环也叫哈希环。
redis相关知识——一致性哈希、哈希槽

相关文章: