Redis 不能不了解的小功能(一)

注:我在开源中国的博客不用了,对开源中国的技术支持丧失信心了,开始转投segmentfault了
此为原文,转载请注明出处:https://segmentfault.com/a/11...mysql

redis有不少小功能,可是很实用。咱们来介绍几个。redis

慢查询

许多存储系统都提供慢查询日志来帮助开发运维人员定位问题,好比mysql。慢查询日志就是系统计算每条命令的执行时间,当执行时间超过必定的阈值,就将这条命令的相关信息记录下来,redis也提供了相似的功能。sql

这里列出一个图简单表述一个redis命令的生命周期:
图片描述segmentfault

须要注意的是,慢查询只统计命令命令执行的过程,网络传输等并不统计,因此若是说没有慢查询并不表明客户端没有超时的问题。网络

那么回到慢查询,这个东西如何配置,又存放在哪里?
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命令设置。spa

若是要将上面提到的方式配置的参数持久化到本地配置文件,能够执行config rewrite命令。日志

查询慢日志的命令:

slowlog get [n]其中n表明要查看多少条慢日志。

图片描述

一条慢日志通常都会有前4个属性,到了redis4.0以上版本出现了后面两个属性。
查看慢日志的条数:

slowlog len

慢日志重置:
slowlog reset

慢查询可以有效帮助我慢找到redis的问题,但在实际使用中有几个建议:

  1. slowlog-max-len配置建议:这个配置默认是128,线上能够调大,设置过小,可能比较重要的慢日志会被新的慢日志替换掉。线上能够设置1000以上,并不会占用大量内存。
  2. slowlog-log-slower-than配置建议: 这个配置默认为10ms,须要根据并发量来肯定,对于高流量高并发得场景,若是命令执行时间超过1ms以上,那么也就是说此时的redis最多支撑1000 ops。所以对于这种场景应设置为1ms。
  3. 慢查询统计只是命令执行时间,命令排队时间和网络传输时间并不包括,从客户端看,执行命令返回的时间确定要比实际在redis执行命令的时间长。
  4. 慢查询日志是在内存中,新的日志会覆盖之前的日志,若是想要看之前的日志,须要按期将日志保存出来。好比按期执行slowlog get命令,而后倒入到关系型数据,以便于之后查询。redis的私有云CacheCloud就提供了这样的功能。

今天就到这里,有时间我会再介绍其余实用的小功能。

相关文章
相关标签/搜索