Redis monitor 监控器

本文介绍Redis的monitor命令,解析其工作原理及应用场景。通过监控服务器执行的所有命令,可深入了解服务器活动,如高频命令分析、热点key识别等,为优化性能提供依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis有一个monitor命令,某个client执行monitor命令后,就成为了一个监控器,服务器端执行的所有命令都会发送给监控器

monitor 是一个用来debug的命令,可以帮助我们了解服务器正在发生什么,例如我们打开monitor监控服务器20分钟,可以收集到期间服务器执行的所有命令,那么就可以分析出很多信息,例如:

(1)什么命令执行得次数多

(2)哪些key是热点

(3)通过对get类型命令的提取,统计出发送流量 

……

 

monitor命令使用


127.0.0.1:6379> monitor
OK

执行后返回“OK”,说明此客户端已经成为了监控器,然后就进入了等待状态,当服务器端执行了命令后,这里会自动显示出执行信息,如:

1454886442.140044 [0 127.0.0.1:63773] "keys" "*"
1454886454.538036 [0 127.0.0.1:63773] "get" "user13"
1454886475.392050 [0 127.0.0.1:63773] "get" "mylist_score"

各部分的含义:

1454886442.140044 是时间戳
[0 127.0.0.1:63773] 其中分别为:数据库编号、clent的IP和端口
"keys" "*" 为执行的命令

 

monitor的实现思路


客户端发送monitor命令后,会发生3个主要的动作

(1)客户端的监视器标识被设置为true

(2)服务器把此客户端添加到了monitors链表的末尾

(3)向客户端返回“OK”

某个client发送命令请求后,server在执行完此命令后,会把命令信息同时发送给monitor链表中个每个client

 

 

使用方法


登录redis-cli命令行,输入monitor,即可进入到redis监控模式。

127.0.0.1:6379> monitor
OK

随后即可看到,当有请求时,redis具体都做了什么,我们另外打开一个redis-cli,随便插入一条数据,比如set "hello" "world",monitor监控到

                                                                                 redis-monitor.png

再模拟下上面的那个用户请求数据的功能场景:

def get_user_info(uuid):
    #如果redis中存在该用户的信息,则直接返回
    if REDIS.exists(uuid):
        returnREDIS.get(uuid)
    #否则从mysql中取,并在redis中设置该信息
    try:
        info = mysql_op.query(uuid)
        assert info is not None
        REDIS.set(uuid, info, ex=3600)
    except Exception, e:
        raise e
    return info

首次运行后,对应到redis的监控如下,可以看到,redis里没有找到,然后从mysql中查找,并做了set操作将信息存起来,再次运行后,发现redis里存在,因此直接从redis里get数据。

                                                                                 redis-request-log.png

当然,为了演示,上面只是一个简单的例子,并没有考虑连接性能问题,也没有考虑数据更新,比如用户是做一个更新或者删除操作,则相应的也要把redis里的信息也同步更新。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值