redis monitor 监控说明

1、监视器

Redis监视器是用于监控或观察Redis服务器指令执行的一种特殊的客户端。创建Redis监视器的方式也很简单,启动一个客户端后,执行monitor指令,客户端将进入监视器状态。进入监视器状态的客户端将不再接受Redis指令输入,而称为了一个实时接受服务器指令执行信息的消费者。如下图:
![]( https://s2.51cto.com/images/blog/202305/29144029_647448dde638438202.png?x-oss-process=image/watermark ,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184/format,webp)

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服务器可以有多个监视器,工作原理见下图:
![]( https://s2.51cto.com/images/blog/202305/29144030_647448de0b40079844.png?x-oss-process=image/watermark ,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184/format,webp)

由monitor指令的执行逻辑也可以看出监视器同Redis服务器的关系采用链表维护与redisServer中。结构如下:
![]( https://s2.51cto.com/images/blog/202305/29144029_647448dde0bcf2386.png?x-oss-process=image/watermark ,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184/format,webp)

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

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

posted @ 2023-07-31 09:50  Mountain_SY  阅读(323)  评论(0)    收藏  举报