首页/数据/Redis 进阶速查/集群的能力边界与限制

集群的能力边界与限制

需明确的边界:不支持多库、多 key 操作需同槽、16K 槽数量固定、故障切换非强一致、大 key 与热点在单分片内无法分散。

Redis 进阶速查数据更新于 2026-10-13

集群的硬边界

使用集群前必须清楚它的边界:不支持多数据库,只能使用 0 号库;涉及多个键的操作要求这些键位于同一个槽;槽的总数固定为 16384,不多不少;故障转移基于异步复制,切换时可能丢掉尚未同步到新主库的写入;大 key 与热点在单个分片之内无法被分散。这些不是靠调参就能绕过的限制,而是架构决定的,选型阶段就要逐项确认业务是否会踩线。

基本信息

多库支持不支持,只有 0 号库
多键操作要求同槽,可用哈希标签保证
槽总数固定 16384
一致性异步复制,切换可能丢少量写入
热点单分片内的热点无法自动分散

典型使用场景

  • 选型评估:确认业务是否依赖多库或多键原子操作
  • 改造评估:把单机实例迁移到集群前逐项核对用法
  • 代码评审:静态扫描是否存在跨槽的多键命令
  • 容量规划:接受单分片存在容量与吞吐上限这一前提
  • 事故预案:明确切换窗口内允许丢失的数据范围

边界验证

边界验证
redis-cli -p 7000 CLUSTER INFO | grep -E 'cluster_state|cluster_slots_assigned'
redis-cli -p 7000 CLUSTER KEYSLOT user:1001           # 确认键落在哪个槽
redis-cli -p 7000 MGET '{u1}:a' '{u1}:b'              # 同槽时可以执行
redis-cli -p 7000 MGET user:1 user:2                  # 不同槽会报 CROSSSLOT
redis-cli -p 7000 SELECT 1                            # 集群下不支持切库
redis-cli -p 7000 DBSIZE                              # 集群只有一个库

边界与应对

边界影响应对
不支持多库按库号隔离的设计无法直接迁移改用键前缀隔离
多键需同槽跨键操作直接报错用哈希标签绑定相关键
槽数固定分片粒度受槽分配限制规划分片数量时考虑粒度
异步复制切换可能丢未同步写入关键数据另有持久化与对账
更多分片不等于更好性能。单分片内的热点键、跨分片聚合查询以及需要跨键原子性的业务逻辑,依然要在业务层解决,集群能做的只是把整体压力分散到不同分片上。
单机模式跑得好好的代码,切到集群后大面积报错,绝大多数是「多键操作跨槽」和「使用了非 0 号库」这两类用法。迁移前先做一次静态代码扫描,比上线后逐个功能排查便宜得多。

易错点

  • 业务代码依赖切库分隔数据,迁移到集群后相关功能直接不可用
  • 事务或 Lua 脚本里访问的键不在同一个槽,运行时报跨槽错误
  • 把集群当强一致数据库使用,遇到切换丢数据才发现语义不符
  • 热点键集中在单个分片,以为加节点就能解决,实际仍未分散

数据来源与参考

  • Redis 官方文档:Cluster 局限说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌