redis客户端命令分为:
1发送命令
2命令排队
3命令执行
4返回结果
慢查询只统计命令执行的结果
##慢查询的两个配置参数
Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决
预设阀值 超时时间
slowlog-log-slower-than 设置超出的时间,单位为微秒,默认值为10000毫秒,执行的命令超过时间判定为慢查询
slowlog-log-slower-than=0 将记录所有命令
相对的slowlog-log-slower-than<0 对任何命令都不会记录
如何设置
1 配置文件
2config set
slowlog-log-slower-than=10000 此处10000为微秒数 config rewrite 配置持久化
预设阀值 最大条数
slowlog-max-len 说明了最多慢查询日志能存储多少条,但是如果上限了那么Redis将会怎么处理呢?这就涉及到了Redis的慢查询日志,Redis事实上使用了一个列表来存储慢查询日志,当日志到了最大条数时,在插入一条慢查询日志 redis会将最早插入的一个命令从列表中移除。
如何设置
1 配置文件
2config set
config set slowlog-max-len 1000 此处1000为条数
config rewrite 配置持久化
查看慢查询
获取慢查询日志
slowlog get [n] 此处n为返回的条数 不加返回所有
每一条慢日志查询都有四个属性
- 标识的id
- 发生的时间戳
- 命令消耗的时间 (单位也为微秒)
- 执行的命令和参数
获取慢日志的长度
slowlog len
慢日志的重置
slowlog reset
注意点
-
线上建议调大慢查询列表:slowlog-max-len,记录慢查询时Redis会对长命令做阶段,并不会占用大量内存。增大慢查询列表可以减缓慢查询被剔除的可能
-
由于Redis为单线程响应命令,对于高流量的场景如果命令执行在1毫秒以上,那么Redis最多可支撑的OPS不到1000,所以对高OPS场景的Redis建议设置为1毫秒 :slowlog-log-slower-than
(OPS:operation persecode每秒操作的次数。意味着每秒对Redis的持久化)
- 慢查询由于只检查命令执行 所以执行命令的时间较长可以发生在其他环节