slowlog 此命令用于读取和重置Redis慢查询日志。

一、Redis slowlog 官方概述:

Redis Slow Log是一个用于记录超过指定执行时间的查询的系统。执行时间不包括与客户端交谈,发送答复等I / O操作,而仅包括实际执行命令所需的时间(这是命令执行的唯一阶段,在该阶段线程被阻塞并且不能同时满足其他要求)。

通俗的讲使用这个命令可以读取或重置 Redis 慢速查询日志。就是 redis 可以把执行时间超过我们设定值的命令记录下来,slowlog 是记录到内存中的,所以查询非常快。这里的执行时间不包括 I/O 操作,比如与客户端,发送应答等,就是实际执行命令所需的时间。

二、设置 Redis slowlog

官方文档介绍:
(1)您可以使用以下两个参数配置慢速日志:slowlog-log-slower-than告诉Redis执行命令的时间(以微秒为单位)要超过多少秒才能记录命令。请注意,负数将禁用慢速日志记录,而零值将强制记录每个命令。 slowlog-max-len是慢日志的长度。最小值为零。当记录新命令并且慢速日志已经达到最大长度时,最旧的日志将从已记录命令队列中删除,以腾出空间。
(2)可以通过编辑redis.conf或在服务器运行时使用CONFIG GET和CONFIG SET命令来完成配置。
总结起来就是两种方式:
可以通过配置 redis.conf 来完成。
运行时,使用 CONFIG GET 和 CONFIG SET 命令配置。

第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
需要注意的是,设置负数表示禁用 slowlog ,而设置 0 则强制记录每个命令的执行情况。

redis 127.0.0.1:6379>config set slowlog-log-slower-than 10000
"OK"
 
redis 127.0.0.1:6379>config get slowlog-log-slower-than
1)  "slowlog-log-slower-than"
2)  "10000"

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

日志
获取条数设置
CONFIG GET slowlog-max-len
设置保存条数
CONFIG SET slowlog-max-len 1000
例:
让 slow log 最多保存 1000 条日志:
CONFIG SET slowlog-max-len 1000

另外,使用 slowlog len 命令可以查看当前已记录的数量。
使用 slowlog reset 重置已记录的 slowlog 信息。

三. 获取慢日志记录

慢速日志存储在内存中,因此不会写入有关慢速命令执行信息的文件。 这样一来,慢速日志就非常快了,因为您可以启用所有命令的日志记录(将slowlog-log-slower-than-config参数设置为零),而对性能的影响不大。
要读取慢日志,请使用SLOWLOG GET命令,该命令返回慢日志中的每个条目。 可以仅返回N个最新条目,该条目将附加参数传递给命令(例如SLOWLOG GET 10)。
请注意,您需要最新版本(需要 2.2.12及以上版本的 redis 才能支持)的redis-cli才能读取慢速日志输出,因为它使用了协议的某些功能,这些功能以前在redis-cli中没有实现(深度嵌套的多批量回复)。
另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。