单机 Redis 很快,但内存总有上限。
Redis Cluster 解决的是:
- 横向扩容
- 自动分片
- 一定程度的可用性
Redis 官方文档说明,Cluster 不用一致性哈希,而是用 hash slot。
最关键的数字:
Redis Cluster 一共有 16384 个 hash slots每个 key 会映射到某一个 slot。
CRC16(key) % 16384 -> slot例如:
Node A -> slots 0 - 5500
Node B -> slots 5501 - 11000
Node C -> slots 11001 - 16383#Cluster 的核心心智
整个城市不是一座大楼
而是 16384 个分区窗口
每个节点负责其中一部分#1. 扩容是搬 slot,不是整库停机迁移
官方文档特别强调:
- 增删节点时,可以迁移 hash slots
- 迁移 slot 不需要整库停机
#2. 多 key 操作有边界
Redis 官方文档明确写到:
- 多 key 命令
- 整个事务
- Lua 脚本
都要求涉及的 key 落在同一个 hash slot
如果你想强制多个 key 进入同一个 slot,可以用 hash tags:
order:{9001}:info
order:{9001}:status
order:{9001}:items这样三者会进同一 slot。
#3. Cluster 不是“绝对不会挂”
官方文档写得很直白:
- 少量节点故障时,集群可能继续工作
- 但如果多数 master 不可用,集群会不可用
所以 Cluster 的本质是:
分片 + 一定程度高可用
不是无限神力