美文网首页
Redis慢查询

Redis慢查询

作者: lv_shun | 来源:发表于2020-05-07 17:55 被阅读0次

    在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慢查询

          本文链接:https://www.haomeiwen.com/subject/hxiaghtx.html