美文网首页技术分享
Redis变慢了,你会怎么排查(一)

Redis变慢了,你会怎么排查(一)

作者: Amazing慕丶涵 | 来源:发表于2020-09-29 19:23 被阅读0次

    Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。

    很多时候,Redis出现访问延迟变大,都与我们的使用不当运维不合理导致的。

    这篇文章我们就来分析一下Redis在使用过程中,经常会遇到的延迟问题以及如何定位和分析。

    使用复杂度高的命令

    如果在使用Redis时,发现访问延迟突然增大,如何进行排查?

    • 1、首先,第一步,建议你去查看一下Redis的慢日志。Redis提供了慢日志命令的统计功能,我们通过以下设置,就可以查看有哪些命令在执行时延迟比较大。

    首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近 1000 条慢日志记录:

    # 命令执行超过5毫秒记录慢日志
    CONFIG SET slowlog-log-slower-than 5000
    # 只保留最近1000条慢日志
    CONFIG SET slowlog-max-len 1000
    

    设置完成之后,所有执行的命令如果延迟大于5毫秒,都会被Redis记录下来,我们执行SLOWLOG get 5查询最近5条慢日志:

    127.0.0.1:6379> SLOWLOG get 5
    1) 1) (integer) 32693       # 慢日志ID
       2) (integer) 1593763337  # 执行时间
       3) (integer) 5299        # 执行耗时(微妙)
       4) 1) "LRANGE"           # 具体执行的命令和参数
          2) "user_list_2000"
          3) "0"
          4) "-1"
    2) 1) (integer) 32692
       2) (integer) 1593763337
       3) (integer) 5044
       4) 1) "GET"
          2) "book_price_1000"
    ...
    

    通过查看慢日志记录,我们就可以知道在什么时间执行哪些命令比较耗时,如果你的业务经常使用O(n)以上复杂度的命令,例如sort、sunion、zunionstore,或者在执行O(n)命令时操作的数据量比较大,这些情况下Redis处理数据时就会很耗时。

    如果你的服务请求量并不大,但Redis实例的CPU使用率很高,很有可能是使用了复杂度高的命令导致的。

    解决方案:就是,不使用这些复杂度较高的命令,并且一次不要获取太多的数据,每次尽量操作少量的数据,让Redis可以及时处理返回。

    相关文章

      网友评论

        本文标题:Redis变慢了,你会怎么排查(一)

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