详解 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 13️⃣ 查看状态
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/