当前位置:首页 > 问答 > 正文

Redis实时请求怎么查看啊,具体请求信息又该咋弄才好呢?

想知道Redis现在正在干什么,有哪些请求正在执行,这其实就是在问如何监控Redis的实时活动,最简单直接的办法,就是使用Redis自带的命令行工具,就像我们打开电脑的任务管理器一样。

第一招:使用Redis自带的CLI命令

最常用的命令是 INFO 命令,你连接到Redis服务器后,输入 INFO,它会返回一大堆信息,内容非常多,但如果你只关心客户端的连接和正在执行的命令,可以更精确一点,输入 INFO clients,它会告诉你当前有多少个客户端连接着;输入 INFO stats,里面会包含一些统计信息,比如总共处理了多少次命令,但这还不是真正的“实时”。

想要看真正的实时动态,你得用 MONITOR 命令,这个命令非常强大,你只要在Redis的命令行界面输入 MONITOR,然后回车,它就会变成一个实时日志输出窗口,任何客户端对Redis发起的任何命令,都会立刻在这个窗口里显示出来,包括命令本身、发起命令的客户端端口号和时间戳,比如你会看到类似这样的行:123456 [0 127.0.0.1:54567] "GET" "user:123:name",这行信息的意思就是,在某个时间点,来自IP127.0.0.1端口54567的客户端执行了一个GET命令,要获取键user:123:name的值。

Redis实时请求怎么查看啊,具体请求信息又该咋弄才好呢?

根据Redis官方文档的提醒,MONITOR命令虽然方便,代价却很高,因为它会严重影响Redis的性能,Redis服务器需要把收到的每一个命令都复制一份发给所有开启了MONITOR的客户端,在高流量的生产环境下,这可能会让Redis的吞吐量大幅下降,这个命令一般只建议在调试或者开发环境短暂使用,绝对不能长时间在生产环境开着。

第二招:使用redis-cli的统计模式

如果你觉得MONITOR的信息太杂太乱,而且不敢在生产环境用,那还有一个更轻量级的选择,在使用redis-cli连接服务器时,可以加上一个参数 --stat,命令就像这样:redis-cli -h your_redis_host -p your_redis_port --stat

这个模式不会打印出每条具体的命令,而是会以一个固定的频率(默认一秒一次)刷新屏幕,显示一些关键的实时统计指标,它会告诉你这一秒钟内处理了多少个命令、客户端连接数的变化、以及内存的使用情况等等,它用一种汇总的方式让你快速了解Redis的负载和健康状态,对性能的影响极小,非常适合在生产环境进行短时间的观察。

Redis实时请求怎么查看啊,具体请求信息又该咋弄才好呢?

第三招:查看慢查询日志

你关心的可能不是所有请求,而是那些执行得很慢的、可能有问题请求,Redis提供了一个叫“慢查询日志”的功能,它会自动记录那些执行时间超过你设定阈值的命令。

这个功能默认是关闭的,你需要通过配置两个参数来开启它:slowlog-log-slower-thanslowlog-max-len,第一个参数slowlog-log-slower-than的单位是微秒,10000微秒就是10毫秒,意思是,执行时间超过10毫秒的命令就会被记录下来,你可以根据你系统的性能要求调整这个值,比如设置为0会记录所有命令,设置为负数则禁用慢日志,第二个参数slowlog-max-len是指慢查询日志列表的最大长度,因为日志是存在内存里的,不能无限增长,达到这个长度后,旧的记录就会被删除。

设置好之后,你就可以用 SLOWLOG GET 命令来查看记录的慢查询了,这个命令会返回一个列表,每条慢查询记录都包含了非常详细的信息:一个是这条命令唯一的ID,一个是命令发生的时间戳,一个是命令执行耗费的时间(单位也是微秒),还有就是命令本身以及其参数,通过分析这些慢查询,你就能准确地找到是哪些操作拖慢了Redis,从而有针对性地进行优化,比如是不是某个键太大了,或者某个命令用得不对。

Redis实时请求怎么查看啊,具体请求信息又该咋弄才好呢?

第四招:借助外部图形化监控工具

如果你觉得命令行还是不够直观,或者需要长期的监控和告警,那么最好的选择就是使用外部的图形化监控工具,这些工具通常需要你在Redis服务器上部署一个数据采集 agent,然后由这个agent定期去收集Redis的INFO命令输出、慢查询日志等指标,再发送到中央监控服务器进行存储和展示。

这方面最著名的开源组合是 Prometheus + Grafana,Prometheus负责抓取和存储数据,Grafana则负责用非常漂亮的图表来展示这些数据,你可以看到QPS(每秒请求数)、内存使用量、连接数、命令耗时分布等指标随时间变化的曲线图,一目了然,很多云服务商提供的Redis服务也自带了非常完善的监控面板。

还有一些专门的APM工具,也集成了对Redis的监控,可以追踪到具体哪个应用、哪个业务逻辑发起的Redis请求,并把数据库请求和业务代码关联起来,这对于排查复杂问题尤其有帮助。

查看Redis实时请求,如果只是临时看一眼,可以用MONITOR(注意性能风险)或redis-cli --stat,如果想找出性能瓶颈,一定要配置和使用SLOWLOG慢查询日志,如果要做长期、稳定的监控和告警,那就搭建Prometheus+Grafana这样的专业监控系统,根据你的不同需求,选择最适合的方法。