Redis慢查询

在redis使用过程中,难免出现客户端超时,其中一个原因可能因为慢操作。
redis如何设置和查看慢查询呢?
首先了解下redis指令的生命周期

redis指令的生命周期

  1. 客户端发送指令
  2. 命令排队(单线程)
  3. 执行命令
  4. 返回结果

而慢查询发生在第3阶段,而如果被redis定义为慢查询,就会存储到redis中的慢查询队列中,这个队列时先进先出的,且队列保存在内存中,redis重启时清空。

慢查询两个配置参数:

  1. slowlog-log-slower-than: 设置慢查询预设的超时阈值,单位微秒。
  2. 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,可以根据实际情况设定,毕竟数据会保存在内存中。

设置参数方式

  1. 通过config配置文件中设置,但是需要重启redis。
  2. 通过命令方式设置
    • 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) ""
  1. id
  2. 时间戳
  3. 执行时长
  4. 命令信息
  5. 客户端信息

所以通过redis提供的配置和命令,我们可以很方便的查看客户端发来的慢查询并进行优化,避免客户端出现超时。

你可能感兴趣的:(Redis慢查询)