在redis使用过程中,难免出现客户端超时,其中一个原因可能因为慢操作。
redis如何设置和查看慢查询呢?
首先了解下redis指令的生命周期
redis指令的生命周期
- 客户端发送指令
- 命令排队(单线程)
- 执行命令
- 返回结果
而慢查询发生在第3阶段,而如果被redis定义为慢查询,就会存储到redis中的慢查询队列中,这个队列时先进先出的,且队列保存在内存中,redis重启时清空。
慢查询两个配置参数:
- slowlog-log-slower-than: 设置慢查询预设的超时阈值,单位微秒。
- slowlog-max-len: 表示慢查询日志存储的条数上线。
slowlog-log-slower-than
设定慢查询的阈值,如果超过阈值就将命令记录到队列中。
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
默认是10ms,可以根据项目qps设定。
如果想将所有命令都保存到慢查询队列中,可以将参数设置为0.
如果不需要慢查询保存到队列中,可以将参数设置< 0.
slowlog-max-len
设定慢查询的队列长度,如果超过队列长度,将移除最先入站的一条信息。
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"
默认为128,可以根据实际情况设定,毕竟数据会保存在内存中。
设置参数方式
- 通过config配置文件中设置,但是需要重启redis。
- 通过命令方式设置
- config set slowlog-log-slower-than 10000
- config set slowlog-max-len 129
- config rewrite
查看慢查询队列信息
- slowlog get [n] :看到n条数据
- slowlog len :查看队列数据长度
127.0.0.1:6379> slowlog get 1
1) 1) (integer) 4
2) (integer) 1588411133
3) (integer) 39218
4) 1) "DEBUG"
2) "OBJECT"
3) "list1"
5) "127.0.0.1:63084"
6) ""
- id
- 时间戳
- 执行时长
- 命令信息
- 客户端信息
所以通过redis提供的配置和命令,我们可以很方便的查看客户端发来的慢查询并进行优化,避免客户端出现超时。
网友评论