redis monitor 监控说明

发布时间 2023-07-31 09:52:39作者: Mountain_SY

1、监视器

Redis监视器是用于监控或观察Redis服务器指令执行的一种特殊的客户端。创建Redis监视器的方式也很简单,启动一个客户端后,执行monitor指令,客户端将进入监视器状态。进入监视器状态的客户端将不再接受Redis指令输入,而称为了一个实时接受服务器指令执行信息的消费者。如下图:

Redis监视器由Redis客户端切换状态而来,故其在服务器端的信息也由client结构来维护。monitor命令的执行逻辑如下,可以看出monitor指令会将client结构中flags字段的对应标志位进行置位,同时将客户端client添加于redisServer.monitors链表中,并返回OK字符串。

void monitorCommand(client *c) {
    /* ignore MONITOR if already slave or in monitor mode */
    if (c->flags & CLIENT_SLAVE) return;

    c->flags |= (CLIENT_SLAVE|CLIENT_MONITOR);  //设置监视器标志位
    listAddNodeTail(server.monitors,c);         //将client添加于服务器信息的monitors链表中
    addReply(c,shared.ok);                      //给客户端返回OK
}

2、监视器与Redis服务器关系

Redis服务器可以有多个监视器,工作原理见下图:

由monitor指令的执行逻辑也可以看出监视器同Redis服务器的关系采用链表维护与redisServer中。结构如下:

当Redis服务器执行指令时,会遍历redisServer.monitors链表,将相关信息发送与所有的监视器。

参考资料:
ref: https://blog.51cto.com/u_16099192/6371038
《Redis设计与实现》---黄健宏