ToolkitX
知识库工具箱

Redis Cluster

分布式集群、哈希槽、数据分片

30min·高级

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:6379
redis-cli --cluster 命令创建和管理集群比手写配置容易得多。

04. 集群的限制

Cluster 好使但有限制: 不支持多键跨槽操作——mget/mset 的所有 key 必须在同一槽 不支持跨节点事务——事务只能在单节点内 Lua 脚本必须确保所有操作在同一节点 需要客户端支持 MOVED/ASK 重定向 主流客户端(Jedis、Lettuce、ioredis、redis-py)都已内置支持,这些细节基本帮你处理好了。

知识测验

1/5正确 0

Redis Cluster 有多少个哈希槽?

下一节

应用场景

下一节