*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]]。