慢请求引起的连接超时等问题是影响 Redis 服务质量的常见问题,通过查询慢日志能够帮助您快速找到慢请求问题发生的位置,定位发出请求的客户端 IP,为彻底解决超时问题提供可靠的依据。

背景信息

Redis 慢日志记录是将命令执行时间超过指定值的(通过参数 slowlog-log-slower-than 指定)记录在Reids 内部的一个列表(list)中。

需要注意的是,慢日志中统计的命令执行时间不包括与客户端通信以及命令在单线程队列上的排队延迟,而只是实际执行命令所需的时间。因此,客户端执行命令的时间会大于命令实际执行的时间。

配置慢日志参数

您可以使用以下两个参数配置慢日志:

参数 说明 设置建议

slowlog-log-slower-than

设置慢查询阈值,执行时间超过阈值后会被记录到慢日志。单位为微秒(μs)。

说明

负数会禁用慢日志,而零值会强制记录每个命令。

不要设置过大,通常设置 1ms。

slowlog-max-len

设置慢日志的长度。当记录新命令并且慢速日志已达到其最大长度时,最旧的命令将从记录的命令队列中删除以腾出空间。

不要设置过小,通常设置 1000 左右。

参数设置方法请参见修改配置参数

查看慢日志

  1. 使用 redis-cli 连接到 Redis 数据库

  2. 执行slowlog get <n>命令读取慢日志。

    其中<n>用于指定查看条数。

    执行成功后,系统显示类似如下信息。

    redis 127.0.0.1:6379> slowlog get 2
    1) 1) (integer) 14
       2) (integer) 1572883200
       3) (integer) 15
       4) 1) "ping"
    2) 1) (integer) 13
       2) (integer) 1572740791
       3) (integer) 30
       4) 1) "slowlog"
          2) "get"

    以及 Redis 4.0 或更高版本的可选字段:

    5) "127.0.0.1:58217"
    6) "host-123"

    查询结果说明:

    1)慢查询记录 id。

    2)处理记录命令的 Unix 时间戳。

    3)执行所需的时间,以微秒为单位。

    4)该条记录的命令及参数。

    5)客户端 IP 地址和端口(仅限 4.0 或更高版本)。

    6)客户端名称(仅限 4.0 或更高版本)。

其他相关命令

  • slowlog len:获取慢查询队列长度。

  • slowlog reset:清空慢查询队列。