Redis role 命令

ROLE

在复制环境下返回Redis实例的角色信息,包括实例当前是 master, slave, 还是 sentinel。

ROLE命令还会返回关于复制状态的额外信息(当 role 是 master 或 slave) 或者监控的master名字列表 (当 role 是 sentinel)。

返回值

该命令返回一个数组,数组的第一个元素是查询实例的 role,取值是如下三者之一:

  • “master”
  • “slave”
  • “sentinel”

其它元素信息跟实例的 role 的取值是什么相关。

Master 返回值

当在 master 实例上调用 ROLE 会返回:

1) "master"
2) (integer) 3129659
3) 1) 1) "127.0.0.1"
      2) "9001"
      3) "3129242"
   2) 1) "127.0.0.1"
      2) "9002"
      3) "3129543"

master 实例的输出由以下部分组成:

  1. master 字符串。
  2. master 复制偏移,在 master 和 replicas 之间共享,用来告诉复制流当前的复制位置。
  3. 复制节点(replicans)的 IP,port,replicans的复制偏移。

replicas 返回值

当在 replica 实例上调用 ROLE 会返回:

1) "slave"
2) "127.0.0.1"
3) (integer) 9000
4) "connected"
5) (integer) 3167038

replica 实例的输出由以下部分组成:

  1. slave, 由于向后兼容的原因,所以不适replica。
  2. master 实例的 IP
  3. master 实例的 port
  4. 从 master 实例的视角看复制的状态,可以是Tconnect (未建立连接到 master), connecting (正在进行 master-replica 连接), sync (master 和 replica 之间正在进行同步数据), connected (连接已建立).
  5. 以 master 复制偏移计算的已经收到的数据量。

Sentinel 输出

例如:

1) "sentinel"
2) 1) "resque-master"
   2) "html-fragments-master"
   3) "stats-master"
   4) "metadata-master"

sentinel 输出的组成:

  1. sentinel.
  2. 被 Sentinel 实例监控的 master 的名字列表。

返回值

数组: 第一个元素是  masterslavesentinel三者之一,其余元素如上秒速。

例子

redis> ROLE

1) "master"
2) (integer) 0
3) (empty list or set)
redis> 

为什么使用 slave : 自 Redis 5 起, 除非为了向后兼容,Redis 项目不在使用 slave 这个词。role 命令是个例外,它的协议包含 slave,也许将来等这个命令过时了,就真的完全没有 slave 了。