SLOWLOG subcommand [argument]

Redis SLOWLOG 命令用来设置或重置 Redis 慢查询日志。

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

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

*语法

redis SLOWLOG 命令基本语法如下:

redis 127.0.0.1:6379> SLOWLOG subcommand [argument]

*Redis 慢日志系统

Redis Slow Log 用来记录超过指定执行时间的命令。执行时间不包括 I/O 操作,像建立连接,发送应答等,仅仅时真正执行命令自身所消耗的时间(这个时间线程被阻塞不能响应其它请求)。

配置慢日志有两个参数:

slowlog-log-slower-than 设置执行时间(微秒),超过这个执行时间的命令会被记录。负数表示关闭慢日志,0表示记录所有命令。

slowlog-max-len 设置记录慢日志的最大长度。最小值是0。当一个新命令被记录并且慢日志已经达到了最大长度,那么最老的记录将被删除,以便空间来记录新命令。

可以通过编辑 redis.conf 来配置上面的两个参数,或者使用 CONFIG GETCONFIG SET 配置运行中的实例。

*读取 slow log

慢日志记录在内存中,不会写到文件上。所以即使记录所有执行的命令到慢日志中性能开销也很小。

读取慢日志命令:

SLOWLOG GET 返回每一条慢日志。

SLOWLOG GET n 返回最新的n条慢日志。

注意:请使用新版 redis-cli 以便能解析慢日志输出,较老版本的 redis-cli 不支持多行嵌套。

*响应输出格式

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

Redis 4.0 及之后版本新增域:

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

每条慢日志由 4 或 6 部分组成:

  • 每条慢日志有一个递增的唯一 ID。
  • 记录慢日志的 Unix 时间戳。
  • 执行这个命令花费的时间,单位是微妙。
  • 数组形式的命令参数。
  • 客户端 ip 和端口 (4.0 only)。
  • 通过 CLIENT SETNAME 命令设置的客户端名字 (4.0 only)。

可以用唯一 ID 来避免慢日志被处理多次(例如你有一个每当产生新的慢日志发送报警的脚本)。

ID 在 Redis 运行期间不会重置,Redis 重启之后会重置 ID。

*查询当前 slowlog 的长度

*SLOWLOG LEN *获取 slow log 的长度。

*重置 slow log

SLOWLOG RESET 命令用来重置 slowlog。一旦删除 slowlog 不可恢复。