Redis 集群
想到一句很搞笑的话:“为什么要用集群呢,单机不香吗?”。确实,为什么要选择集群呢?大概都是从两个角度来考量的: 提高系统的可用性,单点故障是任何系统的灾难。 提高系统的高性能,单台计算机的处理能力肯定是有限的。 Redis 集群是如何实现的呢?我比较吃惊的是,集群中提供服务的都是 Master 节点,每个节点都负责一部分槽位。在整个集群中,数据是根据槽位来存储的,总共有16384个槽位。 客户端操作一个 Key ,如何定位它要写到哪个槽位上呢?其实也是一个哈希处理算法: CRC16(Key) & 16384 对比我们经常使用的 HASH 、一致性 HASH , Redis 集群引入了槽位。 HASH 算法都是直接通过元素来计算,应该跟哪一个节点来进行交互。但 Redis 集群在两者之间又引入了槽位。 元素Key -> Hash计算槽位 -> 确定集群中的节点 问题来了,对于诸如 MSET 这种命令,它会同时设置多个 Key ,集群如何处理这种情况呢?集群引入了 HASH Tag 来辅助我们:通过只计算 HASH Tah 中的部分来计算槽位: // 只计算{}中的部分来确定槽位 {comment:repost}note {comment:repost}user 如果没有特殊处理,客户端的请求肯定不知道具体应该跟哪一个 Redis 节点打交道。比如存在两个节点,且它们负责的槽位如下: