注:我在开源中国的博客不用了,对开源中国的技术支持丧失信心了,开始转投segmentfault了
此为原文,转载请注明出处:https://segmentfault.com/a/11...
redis有很多小功能,但是很实用。我们来介绍几个。
慢查询
许多存储系统都提供慢查询日志来帮助开发运维人员定位问题,比如mysql。慢查询日志就是系统计算每条命令的执行时间,当执行时间超过一定的阈值,就将这条命令的相关信息记录下来,redis也提供了类似的功能。
这里列出一个图简单表述一个redis命令的生命周期:
需要注意的是,慢查询只统计命令命令执行的过程,网络传输等并不统计,所以如果说没有慢查询并不代表客户端没有超时的问题。
那么回到慢查询,这个东西如何配置,又存放在哪里?
redis提供几个配置,slowlog-log-slower-than 和 slowlog-max-len。
从字面上可以看出slowlog-log-slower-than就是之前提到的阈值,单位是微秒,默认是10000微秒也就是10ms。也就说如果一条命令执行时间超过10ms,就会被记录在慢日志中。那为什么10ms也算慢查询?在高并发得环境下,redis可以执行每秒几万的命令,10ms其实在这种环境下已经算是比较高的了。设置有些高要求的系统不能容忍。
而另一个参数, slowlog-max-len的用处是设置存储慢日志多少条。redis其实用一个列表在内存中保存慢日志。当慢日志列表已经达到最大的条数的时候,最早插入的那一条将被从列表移出。
配置这两个参数可以修改配置文件,可以再redis-cli中使用config set命令设置。
如果要将上面提到的方式配置的参数持久化到本地配置文件,可以执行config rewrite命令。
查询慢日志的命令:
slowlog get [n]其中n代表要查看多少条慢日志。
一条慢日志一般都会有前4个属性,到了redis4.0以上版本出现了后面两个属性。
查看慢日志的条数:
slowlog len
慢日志重置:slowlog reset
慢查询能够有效帮助我慢找到redis的问题,但在实际使用中有几个建议:
- slowlog-max-len配置建议:这个配置默认是128,线上可以调大,设置太小,可能比较重要的慢日志会被新的慢日志替换掉。线上可以设置1000以上,并不会占用大量内存。
- slowlog-log-slower-than配置建议: 这个配置默认为10ms,需要根据并发量来确定,对于高流量高并发得场景,如果命令执行时间超过1ms以上,那么也就是说此时的redis最多支撑1000 ops。因此对于这种场景应设置为1ms。
- 慢查询统计只是命令执行时间,命令排队时间和网络传输时间并不包括,从客户端看,执行命令返回的时间肯定要比实际在redis执行命令的时间长。
- 慢查询日志是在内存中,新的日志会覆盖以前的日志,如果想要看以前的日志,需要定期将日志保存出来。比如定期执行slowlog get命令,然后倒入到关系型数据,以便于以后查询。redis的私有云CacheCloud就提供了这样的功能。
今天就到这里,有时间我会再介绍其他实用的小功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。