首页/数据/数据库速查/集群使用限制(DB0 / 多键 / Lua / 事务)
Redis 运维与场景124 条

集群使用限制(DB0 / 多键 / Lua / 事务)

集群限制清单:只有 DB 0;多键操作要求同槽;Lua 脚本所有键须同槽且显式声明;事务/WATCH 同理;FLUSHALL 等命令需多节点执行。

数据库速查数据更新于 2026-10-13

集群使用限制是什么

集群为了分片牺牲了一部分多键能力:只有 0 号库、多键操作必须同槽、脚本与事务里的键也必须同槽、全量类命令只作用于当前节点。这些限制不是缺陷而是设计取舍,改造代码前必须先理解,否则上线后才发现批量命令报错,返工代价很高。

基本信息

库数量只有 0 号库,切换库命令不可用
多键操作读写多个键时必须落在同一个槽
脚本与事务其中涉及的所有键必须同槽
全量命令清库等命令只作用于当前节点,需要逐节点执行
遍历命令扫描只能覆盖当前节点,全量遍历要遍历所有主节点

典型使用场景

  • 代码改造评估:梳理现有批量操作,判断哪些需要改成同槽访问
  • 键设计前置:在设计阶段确定哈希标签方案,避免后期大规模返工
  • 数据统计:需要全集群统计时用逐节点调用的方式采集
  • 批量清理:清空数据要逐节点执行,不能指望一条命令搞定
  • 客户端选型:确认客户端支持重定向与集群拓扑刷新

逐节点执行与遍历

逐节点执行与遍历
# 逐节点执行命令(对集群所有主节点)
redis-cli --cluster call 10.0.0.1:6379 DBSIZE
redis-cli --cluster call 10.0.0.1:6379 SCAN 0 COUNT 100
# 集群感知客户端直接遍历(自动跟随重定向)
redis-cli -c --scan --pattern 'user:*'
# 查看槽分配是否完整
redis-cli -c -p 6379 CLUSTER INFO | grep -E "cluster_state|cluster_slots_assigned"
# 跨槽批量操作会报错(错误信息含跨槽提示)
redis-cli -c MGET user:88:name user:99:name

限制清单

限制项表现应对
只有 0 号库切换库命令不可用用键前缀区分业务,不再依赖多库
多键必须同槽跨槽批量命令报错用哈希标签让相关键同槽
脚本键必须同槽跨槽脚本直接报错脚本内键全部用同一标签
清库只影响单节点数据仍留在其他节点逐节点执行或使用集群工具
扫描只覆盖单节点遍历结果不完整遍历所有主节点或改用集群感知客户端
为集群改造代码就三件事:收敛多键操作、设计哈希标签、换用集群感知客户端;这三件事没做好,后期排障会非常痛苦。
把清库或全量扫描当成全局操作:实际只影响一个节点,会造成数据残留或统计口径错误。

易错点

  • 在集群上执行清库命令以为清空全部:只影响当前节点,其他节点数据仍在
  • 用扫描命令做全量遍历:只覆盖一个节点,结果严重不完整
  • 批量命令未做同槽设计:上线后大批量操作直接报错,改造被迫紧急上线
  • 客户端不支持重定向:槽迁移与故障转移期间大量请求失败

数据来源与参考

  • Redis 官方文档: Cluster 的限制
  • Redis 官方文档: redis-cli --cluster call

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌