详解 Redis Cluster

你好,我是阿彬。今天我们来聊一聊 Redis Cluster。

Redis Cluster 是 Redis 官方提供的分布式解决方案,用于实现自动分片 + 高可用,是生产环境中最常用的 Redis 架构之一。

Redis Cluster 是什么?

一句话:

Redis Cluster = 多节点 Redis + 自动分片 + 去中心化

它解决了三个核心问题:

  • ✅ 数据太大(单机放不下)
  • ✅ 并发太高(单机扛不住)
  • ✅ 容灾(节点挂了怎么办)

核心机制

1️⃣ 哈希槽(Hash Slot)

Redis Cluster 不是简单分库,而是:

👉 把所有 key 映射到 16384 个槽位

slot = CRC16(key) % 16384

然后:

  • 每个节点负责一部分 slot
  • 数据自动分布

2️⃣ 数据分片(自动)

例如:

节点A:0 - 5000
节点B:5001 - 10000
节点C:10001 - 16383

当你写:

SET user:1 "Tom"

Redis 会自动:

  • 计算 slot
  • 路由到对应节点

3️⃣ 去中心化(无主节点)

不同于传统主从:

  • 每个节点都可以处理请求
  • 客户端直接连接任意节点
  • 节点之间互相通信(gossip 协议)

4️⃣ 高可用(主从 + 自动故障转移)

每个主节点都有从节点:

Master A → Slave A1
Master B → Slave B1

如果 Master 挂了:

  • 自动选举 Slave 晋升为 Master

基本架构示意

     Client
       ↓
┌───────────────┐
│ Redis Cluster │
├─────┬─────┬───┤
│ M1  │ M2  │ M3│
│ S1  │ S2  │ S3│
└─────┴─────┴───┘

👉 至少 6 个节点(3主 + 3从)才是标准生产配置

如何搭建

1️⃣ 启动多个 Redis 实例

redis-server --port 7000 --cluster-enabled yes
redis-server --port 7001 --cluster-enabled yes
# ...

2️⃣ 创建集群

redis-cli --cluster create \
127.0.0.1:7000 \
127.0.0.1:7001 \
127.0.0.1:7002 \
127.0.0.1:7003 \
127.0.0.1:7004 \
127.0.0.1:7005 \
--cluster-replicas 1

3️⃣ 查看状态

redis-cli -c -p 7000
cluster nodes
cluster info

注意事项

⚠️ 1. 不支持多 key 操作(跨 slot)

MGET key1 key2 # ❌(如果不在同一 slot)

解决:使用 hash tag

SET user:{1}:name "Tom"
SET user:{1}:age 20

👉 {1} 保证在同一个 slot

⚠️ 2. 不支持事务跨节点

MULTI ... EXEC # ❌(跨 slot)

⚠️ 3. Lua 脚本限制

  • 所有 key 必须在同一 slot

⚠️ 4. pipeline 可能跨节点

需要客户端自动拆分

生产最佳实践

✅ 1. 节点数量

  • 最少:3主3从
  • 推荐:6主6从(更稳)

✅ 2. key 设计

user:{id}:info
order:{id}

👉 为多 key 操作预留 hash tag

✅ 3. 避免热点 key

  • 热 key → 单节点压力大
  • 解决:
    • 本地缓存
    • key 分片

✅ 4. 监控

关注:

  • slot 分布
  • 节点延迟
  • 内存使用

详解 Redis Cluster
https://liuyuhe666.github.io/2026/03/29/详解-Redis-Cluster/
作者
Liu Yuhe
发布于
2026年3月29日
许可协议