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 GET 和 CONFIG 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 不可恢复。