01. Redis 集群——把数据「切开」
一台 Redis 不够用了(内存、QPS 跟不上),就需要集群。Redis Cluster 把数据「切分」到多台机器,每台只存一部分。
跟主从复制的区别:主从是「复制」(每台数据一样),集群是「分片」(每台只存一部分)。
02. 数据分片——哈希槽
Redis Cluster 把数据空间切成 16384 个哈希槽。每个键通过 CRC16 算哈希对 16384 取模,决定它属哪个槽。各节点分摊这些槽。
比如节点 A 管 0~5460 号槽,B 管 5461~10922,C 管 10923~16383。你查 key,客户端先算槽号知道去哪台机器找。
bash
# 看 key 在哪个槽
CLUSTER KEYSLOT mykey
CLUSTER NODES # 所有节点
CLUSTER INFO # 集群状态
CLUSTER SLOTS # 槽分布03. 集群的高可用
Cluster 里每个主节点可配从节点。主挂了从自动顶上——自带故障转移,无需哨兵。
跟 Sentinel 区别:Sentinel 管主从架构,Cluster 管分片架构,各有所长。
bash
# 创建集群(至少 6 节点:3 主 3 从)
redis-cli --cluster create \
192.168.1.1:6379 192.168.1.1:6380 \
192.168.1.2:6379 192.168.1.2:6380 \
192.168.1.3:6379 192.168.1.3:6380 \
--cluster-replicas 1
# 加节点
redis-cli --cluster add-node 192.168.1.4:6379 192.168.1.1:6379
# 重分片
redis-cli --cluster reshard 192.168.1.1:6379redis-cli --cluster 命令创建和管理集群比手写配置容易得多。
04. 集群的限制
Cluster 好使但有限制:
不支持多键跨槽操作——mget/mset 的所有 key 必须在同一槽
不支持跨节点事务——事务只能在单节点内
Lua 脚本必须确保所有操作在同一节点
需要客户端支持 MOVED/ASK 重定向
主流客户端(Jedis、Lettuce、ioredis、redis-py)都已内置支持,这些细节基本帮你处理好了。
知识测验
第 1/5 题正确 0
Redis Cluster 有多少个哈希槽?
下一节
下一节 应用场景