*Redis ROLE 命令

ROLE 返回当前 Redis 实例的角色(主节点、从节点或哨兵)及对应的复制信息。


*语法

ROLE

*参数说明

ROLE 命令不需要任何参数。

参数 类型 必填 说明
无参数

*返回值

返回一个数组,第一个元素为角色名称,后续元素依角色而异:

  • master["master", replication_offset, [replica1_ip, replica1_port, replica1_offset, ...]]
  • slave["slave", master_ip, master_port, replication_state, replication_offset]
  • sentinel["sentinel", [master_names]]

*时间复杂度

O(1)

*

*示例

*主节点

> ROLE
1) "master"
2) (integer) 123456789
3) 1) 1) "192.168.1.200"
      2) (integer) 6379
      3) "123456789"

*从节点

> ROLE
1) "slave"
2) "192.168.1.100"
3) (integer) 6379
4) "connected"
5) (integer) 123456789

*哨兵节点

> ROLE
1) "sentinel"
2) 1) "mymaster"
   2) "myothermaster"

*常见错误

错误 原因 解决
ERR wrong number of arguments 传入了多余参数 ROLE 不需要参数
连接断开时 replication_state 为 "connect" 从节点与主节点断开 检查网络与主节点状态

*最佳实践

  • 复制状态监控:定期检查 ROLE 的复制偏移量差异,判断主从延迟
  • 健康检查脚本:在从节点上执行 ROLE,确认 replication_state 为 "connected"
  • 故障转移判断:配合 INFO replication 使用,ROLE 返回数组更易解析
  • 监控脚本中优先使用 ROLE 而非解析 INFO 的文本输出

*FAQ

Q1: ROLE 和 INFO replication 有什么区别? A: ROLE 返回数组格式,易于程序解析;INFO replication 返回文本块,适合人工查看。两者信息基本一致。

Q2: 从节点的 replication_offset 远小于主节点怎么办? A: 说明主从延迟较大。检查网络带宽、主节点写压力、从节点负载,必要时开启无盘复制或增加从节点。

Q3: ROLE 可以在哨兵节点上执行吗? A: 可以。ROLE 在 Sentinel 节点上返回 ["sentinel", [master_names]]