Redis学习笔记 - 监视器

参考:<<Redis设计与实现>>

  • 注:这本书是基于Redis3.0版本写的,和后面的版本有点差异

通过执行MONITOR命令,客户端成为监视器,实时接收打印服务器当前处理的命令请求的相关信息:

redis> monitor
OK

1567484928.445895 [0 127.0.0.1:62633] "COMMAND"
1567485005.667396 [0 127.0.0.1:62633] "set" "num" "1"
1567485008.035712 [0 127.0.0.1:62633] "get" "num"
1567485054.970072 [0 127.0.0.1:62702] "COMMAND"
1567485058.398922 [0 127.0.0.1:62702] "get" "num"

每当客户端向服务器发送一条命令请求时,服务器处理完这条命令请求,还会把这条命令请求的信息发送给所有监视器,如下图所示:
在这里插入图片描述

一、成为监视器

发送MONITOR命令后,这个客户端就变成了一个监视器。实现原理:

  • 打开客户端的REDIS_MONITOR标志
  • 客户端被添加到redisServer的monitors链表的尾部

示例:

假设之前monitors链表已经有c128、c256、c512三个客户端,客户端c10086发送MONITOR命令,此时monitors链表如下图所示:
在这里插入图片描述

二、向监视器发送命令信息

服务器在每次处理命令前,都会调用replicationFeedMonitors函数,由这个函数将被处理器的命令请求的相关信息发送给各监视器,流程如下:

  • 根据命令请求创建发送给各监视器的信息
  • 服务器遍历monitors链表,将信息发送各客户端

示例:

服务器在时间1567485008.035712,IP 127.0.0.1、端口号62633的客户端发送的命令请求,对0号数据库执行命令get num,那么服务器将会创建以下信息:1567485008.035712 [0 127.0.0.1:62633] "get" "num"

如果服务器monitors链表中有c128、c256、c512三个客户端,那么服务器会分别将信息发送给这三个监视器,如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值