问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求助各位,关于redis耗时比较严重的问题

发布网友 发布时间:2022-04-28 21:10

我来回答

2个回答

懂视网 时间:2022-05-03 19:17

使用好Redis,不仅仅要知道Api的使用,还要知道如何防止Redis阻塞及阻塞的查看和分析。今天,和大家聊聊如何发现Redis的阻塞——通过慢查询找到阻塞的命令。

和Mysql一样,Redis也有慢查询记录。当命令的执行时间超过设定的值时,该命令就会记录到慢查询列表中。通过慢查询,我们可以改进我们的程序。防止redis阻塞。

配置

慢查询的配置参数有两个:

  • slowlog-log-slower-than

  • slowlog-max-len

  • slowlog-log-slower-than用来设定一个阈值,单位为微妙,默认值为10000,即10毫秒。

  • 当值设置为小于0时,任何命令都不会记录;

  • 当值等于0时,会记录所有的命令。

  • slowlog-max-len表示最多记录的条数,默认为128,例如将它设为10,当有第11条慢查询插入的话,那么队头的数据就会出列。

    这两个配置还支持动态配置,当项目刚刚开始时,访问量不是很大时,可以将slow-log-slower-than的值设大些。当访问量越来越大的时候,可能就需要将其值改小点。但我们不想停止redis服务,那么就可以动态的修改该配置。

    127.0.0.1:6379> config set slowlog-log-slower-than 1000
    OK 
    # 在线修改配置
    127.0.0.1:6379> config rewrite
    OK
    # 将修改的配置持久化到配置文件中

    运维建议:当访问量大的时候,一般我们建议将slowlog-log-slower-than设置为1000,或更小。当这个值为1000时,表示redis最多能支持1000个并发。

    慢查询查看

    redis的慢查询查看和mysql有区别,redis查看的话有专门的命令。

    获取慢查询日志

    slowlog get [n],n表示条数,默认为10

    127.0.0.1:6379> slowlog get
    1) 1) (integer) 18004
     2) (integer) 1589424642
     3) (integer) 50
     4) 1) "slowlog"
     2) "get"
     5) "127.0.0.1:58364"
     6) ""
    2) 1) (integer) 18003
     2) (integer) 1589423805
     3) (integer) 47
     4) 1) "slowlog"
     2) "get"
     5) "127.0.0.1:58364"
     6) ""
    ……
  • 第一个参数是日志标识id号

  • 第二个为发生时间戳

  • 第三个为命令执行的时间(微妙)

  • 最后一个是命令及参数。

  • 获取慢查询的长度

    slowlog len

    127.0.0.1:6379> slowlog len
    (integer) 128

    清空慢查询列表

    127.0.0.1:6379> slowlog reset
    OK

    将慢查询日志持久化到mysql中

    因为redis的长度有限制,所以在慢查询很多的情况下,会出现丢失的情况。我们可以定时去redis取出慢查询记录列表,将其持久化到mysql中,防止这种情况发生。

    伪代码如下:

    while (true) {
     $slowlen = $redis->slowlog('len');
     $slowlogs = $redis->slowlog('get',$slowlen);
     $insSql = "INSERT INTO 
     slowlog(exec_time,run_time,command) VALUES";
     
     if (is_array($slowlogs) && count($slowlogs)) {
     
     foreach ($slowlogs as $slowlog) {
      $execTime = $slowlog[2];
      $runTime = $slowlog[1];
      $command = implode(' ', $slowlog[3]);
     
      $insSql .= "('$execTime', '$runTime','$command'),";
     }
     
     $flag = mysqli_query($mysqli, substr($insSql, 0, -1));
     
     if ($flag) {
      $redis->slowlog('reset');
     }
     }
     
     unsleep(10000);
    }

    以上代码,即可实现慢查询持久化到MYSQL中。

    热心网友 时间:2022-05-03 16:25

    (1)redis部署的机器性能,IO.CPU,带宽等等都是没有问题的
    (2)我们访问redis的服务器的IO,CPU,负载也是没问题的
    (3)访问redis使用的是mget操作,一次最多获取50个key,查看redis的慢操作日志,由于mget导致的查询慢操作情况很少
    (4)是否是由于访问redis的服务访问其他数据资源耗时严重的问题,因为服务还访问了其他的redis资源,其他redis的耗时还算比较正常,因此可以排除这个问题
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 Key-value stores键值存储能介绍一下吗? redis.pid文件丢失什么原因,改怎么解决 redis 缓存服务器 怎么给外部系统用 redis客户端访问 redis会打印日志吗 怎样设置redis cluster的日志输出 redis慢日志什么意思 ps cs6中怎么把背景改为图层 移动电视机顶盒可以手机投屏吗 移动送的盒子怎么投屏 一级建造师PK造价工程师,哪个含金量更高 问一下大家,一建含金量高么,京华网校可以考虑么? 一级建造师有多少含金量? 一级建造师价值大不大? 很多人报考一建,一建含金量有多高 碳烧生蚝怎么烤的? 一级建造师各专业含金量怎么样? 目前一级建造师证到底有没有含金量? 如何碳烤生蚝 一建含金量大吗,值得付出吗 一级建造师证书的含金量高不高? 一台windiws可以跑不同版本的redis吗 为什么自己包的红糖汤圆煮好后咬开红糖不能像水一样的流出来?还是固体。我用的红糖粉 为什么路边小吃店里面的汤圆不会变形,汤圆粉里面放了什么? 元宵粉为什么不能做汤圆。 玉米淀粉可以做汤圆吗? 糯米粉怎么做汤圆? 糯米粉可以做汤圆跟糯米糍之外.还可以做什么? 汤圆里不放淀粉可以么? 德国BD SENSORS 数字压力表用于油类以及气体的压力测量可以吗???? 德国BD SENSORS压力变送器 DMK457能满足造船工业和海上作业的特殊要求吗? oppo k7上市时间 oppo k7xk7 电脑打电话对方说我声音小 华为手机听筒声音小的解决方法是什么? 倚天屠龙记84版(刘玉璞,刘德凯主演)电视剧 如何评价各个版本电视剧《倚天屠龙记》? 倚天屠龙记84版 1984年邵逸夫的倚天屠龙记电影版一共有几部? 1984年版的倚天屠龙记在哪里可以看 在哪里可以看到1984,电视,台湾台视,刘德凯饰张无忌版的倚天屠龙记