当redis命令执行时间大于设置的时间,redis会将此命令标记为慢查询,并记录到慢查询d日志队列中
-
redis命令执行的步骤
- 1⃣️客户端发送命令到redis
- 2⃣️命令进入队列排队
- 3⃣️redis执行命令
- 4⃣️返回结果
注:所谓的命令执行时间只指【3⃣️redis执行命令】这一步(其实也很明显只会有这一步,1⃣️4⃣️是网络开销,2⃣️依赖于其他命令的执行速度)
-
慢查询配置
-
slowlog-log-slower-than
指定被标记为慢查询的时间阙值- 时间的单位是微秒,即1000000是1秒
- 默认是:10000微秒
- 负数将禁用慢查询日志
- 0会强制记录每一个命令为慢查询
- 支持动态修改,无需重启redis
config set slowlog-log-slower-than 1000
# The following time is expressed in microseconds, so 1000000 is equivalent # to one second. Note that a negative number disables the slow log, while # a value of zero forces the logging of every command. slowlog-log-slower-than 10000
- 建议设置: 1000μs
-
slowlog-max-len
指定慢查询日志队列的长度- 默认是:128
- 长度没有限制,但是注意,慢查询日志将记录在内存中
- 采用先进先出原则,当队列满了且来了一条新的命令,则最先进入的命令弹出
- 支持动态修改,无需重启redis
config set slowlog-max-len 1000
# There is no limit to this length. Just be aware that it will consume memory. # You can reclaim memory used by the slow log with SLOWLOG RESET. slowlog-max-len 128
-
建议设置: 1000左右
- 定期持久化日志
-
-
慢查询的命令
-
slowlog get [n]
获取慢查询,n是条数- 返回值示例(设置slowlog-log-slower-than为0)
set hh as slowlog get 1 1) (integer) 0 # 每个慢查询条目的唯一的递增标识符 #在Redis服务器运行期间绝不会被重置,仅在Redis服务重启才重置它 2) (integer) 1578886475 # 处理记录命令的unix时间戳 3) (integer) 1892 # 命令执行所需的总时间,以微秒为单位 4) 1) "set" # 组成该命令的参数的数组 2) "hh" 3) "as"
-
slowlog reset
清空慢查询队列,回收慢速日志使用的内存 -
slowlog len
慢查询队列长度
-
网友评论