Redis慢查询(SLOWLOG)命令

Redis慢查询(SLOWLOG)命令教程

Redis 的 SLOWLOG 命令用于记录查询执行时间的日志系统。查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

Redis慢查询(SLOWLOG)配置

设置慢查询(SLOWLOG)

Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GETCONFIG SET 命令对它们动态地进行修改。

第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:

CONFIG SET slowlog-log-slower-than 100

而以下命令记录所有查询时间大于 1000 微秒的查询:

CONFIG SET slowlog-log-slower-than 1000

另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。以下命令让 slow log 最多保存 1000 条日志:

CONFIG SET slowlog-max-len 1000

查看慢查询(SLOWLOG)配置

使用 CONFIG GET 命令可以查询两个选项的当前值:

redis> CONFIG GET slowlog-log-slower-than 1) "slowlog-log-slower-than" 2) "1000" redis> CONFIG GET slowlog-max-len 1) "slowlog-max-len" 2) "1000"

Redis SLOWLOG命令详解

语法

192.168.98.70:6379> SLOWLOG subcommand [argument]

返回值

取决于不同命令,返回不同的值。

时间复杂度

O(1)

可用版本

>= 2.2.12

案例

SLOWLOG命令查看Redis慢查询日志

使用 SLOWLOG 命令查看 Redis 慢查询日志

127.0.0.1:6379> SLOWLOG GET 1) 1) (integer) 12 # 唯一性(unique)的日志标识符 2) (integer) 1324097834 # 被记录命令的执行时间点,以 UNIX 时间戳格式表示 3) (integer) 16 # 查询执行时间,以微秒为单位 4) 1) "CONFIG" # 执行的命令,以数组的形式排列 2) "GET" # 这里完整的命令是 CONFIG GET slowlog-log-slower-than 3) "slowlog-log-slower-than" 2) 1) (integer) 11 2) (integer) 1324097825 3) (integer) 42 4) 1) "CONFIG" 2) "GET" 3) "*"

我们使用了 SLOWLOG GET 命令获取了当前 Redis 服务器的慢查询日志,同时,我们还可以通过后面的参数指定,需要查看具体的慢查询日志的条数,如下代码:

127.0.0.1:6379> SLOWLOG GET 1 1) 1) (integer) 12 2) (integer) 1324097834 3) (integer) 16 4) 1) "CONFIG" 2) "GET" 3) "slowlog-log-slower-than"

我们在 SLOWLOG GET 命令后面加了参数 1,表明我们只需要获取一条慢查询日志。

SLOWLOG命令查看Redis慢查询日志条数

使用 SLOWLOG 命令查看 Redis 慢查询日志条数

127.0.0.1:6379> SLOWLOG LEN (integer) 2

我们使用了 SLOWLOG LEN 命令,查看了 Redis 慢查询日志的条数,返回了 2。

清空Redis慢查询日志

使用 SLOWLOG RESET 命令清空 Redis 慢查询日志

127.0.0.1:6379> SLOWLOG LEN (integer) 2 127.0.0.1:6379> SLOWLOG RESET OK 127.0.0.1:6379> SLOWLOG LEN (integer) 0

首先,我们使用了 SLOWLOG LEN 命令,查看了 Redis 慢查询日志的条数,返回了 2,接着,我们使用了 SLOWLOG RESET 清空了所有的慢查询日志,最后,再次使用 SLOWLOG LEN 命令,查看了 Redis 慢查询日志的条数,返回了 0。

Redis慢查询(SLOWLOG)命令总结

我们可以使用 SLOWLOG GET 命令查看所有的慢查询日志,使用 SLOWLOG GET NUMBER 命令查看最近 NUMBER 条慢查询日志,使用 SLOWLOG LEN 命令获取慢查询的日志的条数,使用 SLOWLOG RESET 命令清空慢查询日志。