一分钟搞懂Redis的慢查询日志操作

 更新时间:2021年11月24日 15:32:05   作者:万猫学社  
redis慢查询指的是命令执行时长比较长的查询,本文详细的介绍了慢查询的具体操作,具有一定的参考价值,感兴趣的可以了解一下

什么是慢查询?

慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程:

  • 发送命令
  • 命令排队
  • 命令执行
  • 返回结果

在慢查询的定义中,统计比较慢的时间段指的是命令执行这个步骤。没有慢查询,并不表示客户端没有超时问题,有可能网络传输有延迟,也有可能排队的命令比较多。

因为Redis中命令执行的排队机制,慢查询会导致其他命令的级联阻塞,所以当客户端出现请求超时的时候,需要检查该时间点是否有慢查询,从而分析出由于慢查询导致的命令级联阻塞。

什么是慢查询日志?

慢查询日志是Redis服务端在命令执行前后计算每条命令的执行时长,当超过某个阈值是记录下来的日志。日志中记录了慢查询发生的时间,还有执行时长、具体什么命令等信息,它可以用来帮助开发和运维人员定位系统中存在的慢查询。

如何获取慢查询日志?

可以使用slowlog get命令获取慢查询日志,在slowlog get后面还可以加一个数字,用于指定获取慢查询日志的条数,比如,获取3条慢查询日志:

> slowlog get 3
1) 1) (integer) 6107
   2) (integer) 1616398930
   3) (integer) 3109
   4) 1) "config"
      2) "rewrite"
2) 1) (integer) 6106
   2) (integer) 1613701788
   3) (integer) 36004
   4) 1) "flushall"
3) 1) (integer) 6105
   2) (integer) 1608722338
   3) (integer) 20449
   4) 1) "scan"
      2) "0"
      3) "MATCH"
      4) "*comment*"
      5) "COUNT"
      6) "10000"

从上面的例子中,可以看出每一条慢查询日志都有4个属性组成:

  • 唯一标识ID
  • 命令执行的时间戳
  • 命令执行时长
  • 执行的命名和参数

如何获取慢查询日志的长度?

可以使用slowlog len命令获取慢查询日志的长度,比如:

> slowlog len
(integer) 121

在上例中,当前Redis中有121条慢查询日志。

如何清理慢查询日志?

可以使用slowlog reset命令清理慢查询日志,比如:

> slowlog len
(integer) 121
> slowlog reset
OK
> slowlog len
(integer) 0

怎么配置慢查询的参数?

正如上面提到的,慢查询需要如下两个配置:

  • 命令执行时长的指定阈值。
  • 存放慢查询日志的条数。

Redis对应提供了两个参数:slowlog-log-slower-than和slowlog-max-len,接下来我们详细介绍一下这两个参数。

slowlog-log-slower-than

slowlog-log-slower-than的作用是指定命令执行时长的阈值,执行命令的时长超过这个阈值时就会被记录下来。它的单位是微秒(1秒 = 1000毫秒 = 1000000微秒),默认是10000微秒。如果把slowlog-log-slower-than设置为0,将会记录所有命令到日志中。如果把slowlog-log-slower-than设置小于0,将会不记录任何命令到日志中。

在实际的生产环境中,需要根据Redis并发量来调整该配置。因为Redis采用单线程响应命令,如果命令执行时间在1000微秒以上,那么Redis最多可支撑OPS不到1000,所以对于高并发场景的Redis建议设置为1000微秒

slowlog-max-len

slowlog-max-len的作用是指定慢查询日志最多存储的条数。实际上,Redis使用了一个列表存放慢查询日志,slowlog-max-len就是这个列表的最大长度。当一个新的命令满足满足慢查询条件时,被插入这个列表中。当慢查询日志列表已经达到最大长度时,最早插入的那条命令将被从列表中移出。比如,slowlog-max-len被设置为10,当有第11条命令插入时,在列表中的第1条命令先被移出,然后再把第11条命令放入列表。

记录慢查询是Redis会对长命令进行截断,不会大量占用大量内存。在实际的生产环境中,为了减缓慢查询被移出的可能和更方便地定位慢查询,建议将慢查询日志的长度调整的大一些。比如可以设置为1000以上

如何进行配置

在Redis中有两个修改配置的方法:

slowlog-log-slower-than 1000
slowlog-max-len 1200

修改Redis配置文件。比如,把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:

使用config set命令动态修改。比如,还是把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:

> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK

如果要Redis把配置持久化到本地配置文件,需要执行config rewrite命令。

总结

慢查询指的是命令执行时长比较长的查询。通过slowlog get命令获取慢查询日志;通过slowlog len命令获取慢查询日志的长度;通过slowlog reset命令清理慢查询日志。通过slowlog-log-slower-than配置命令执行时长的阈值;通过slowlog-max-len配置慢查询日志最多存储的条数。

到此这篇关于一分钟搞懂Redis的慢查询日志操作的文章就介绍到这了,更多相关Redis 慢查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解读redis slaveof命令执行后为什么需要清库重新同步

    解读redis slaveof命令执行后为什么需要清库重新同步

    这篇文章主要介绍了redis slaveof命令执行后为什么需要清库重新同步,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Redis+Caffeine实现多级缓存的步骤

    Redis+Caffeine实现多级缓存的步骤

    随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能,这篇文章主要介绍了Redis+Caffeine实现多级缓存,需要的朋友可以参考下
    2024-01-01
  • redis单节点安装与配置方式

    redis单节点安装与配置方式

    这篇文章主要介绍了redis单节点安装与配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Redis3.2开启远程访问详细步骤

    Redis3.2开启远程访问详细步骤

    redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf
    2018-03-03
  • RedisDesktopManager 连接redis的方法

    RedisDesktopManager 连接redis的方法

    这篇文章主要介绍了RedisDesktopManager 连接redis,需要的朋友可以参考下
    2023-08-08
  • Redis分布式锁一定要避开的两个坑

    Redis分布式锁一定要避开的两个坑

    这篇文章主要为大家详细介绍了Redis中分布式锁一定要避开的两个坑以及对应的解决方法,文中的示例代码讲解详细,希望对大家有所帮助
    2023-04-04
  • Redis 延时任务实现及与定时任务区别详解

    Redis 延时任务实现及与定时任务区别详解

    这篇文章主要为大家介绍了Redis 延时任务实现及与定时任务区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Redis中的3种特殊数据结构详解

    Redis中的3种特殊数据结构详解

    在本文中,我们对三种特殊的数据类型进行了介绍,它们分别是geospatial(地理空间数据类型)、HyperLogLogs和Bitmaps(位图),这些数据类型在不同的领域和应用中发挥着重要作用,并且具有各自独特的特性和用途,对Redis特殊数据结构相关知识感兴趣的朋友一起看看吧
    2024-02-02
  • 关于Redis的慢查询日志功能详解

    关于Redis的慢查询日志功能详解

    Redis慢查询是Redis提供的一项性能优化功能,它可以记录某个查询语句的执行时间、命令参数、执行次数等信息,从而帮助运维人员快速定位某个查询语句的性能问题,需要的朋友可以参考下
    2023-07-07
  • Redis 中spark参数executor-cores引起的异常解决办法

    Redis 中spark参数executor-cores引起的异常解决办法

    这篇文章主要介绍了Redis 中spark参数executor-cores引起的异常解决办法的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论