美文网首页
Redis使用压测报告

Redis使用压测报告

作者: 水寒_3dd0 | 来源:发表于2018-01-30 14:30 被阅读0次

    大家好,我是IT修真院北京分院第30期学员,一枚正直善良的java程序员,今天给大家分享一下,修真院java任务中的一个知识点:Redis性能分析报告

    (1)首先是系统可以在500ms返回时的tps:

       经过很多次变更调试,最终确定全部请求时键500ms以内的线程数最大是22,最大循环次数1:

    也尝试了微调,比如23线程:

    也就不满足条件了,也尝试稍微加上一次循环,也就是22线程2次循环:

    也已经不符合条件。

    那么符合条件的就是22线程1s启动循环1次,它的tps视图:

    因为线程数和循环数都很小,总请求就很少,所以它是一条直线。那就得出结论了,系统可以再500ms内返回时的tps是18.3。

     (2)系统宕机时候的负载:

     首先我得定义宕机,我认为测试被迫停止或者就是宕机,没有按照设置跑完就宕机了。

    100线程1s启动的情况:

    虽然没有宕机,但是响应时间已经非常的长了,但是这还没宕机,调到200线程:

    虽然各个参数都挺惨,但是仍然没有宕机,接下来调到300线程:

    嗯。。还没有,直接加到500线程:

    已经卡住了,并且出现了错误,在观察过程中错误率一直在波动,是因为错误在不断的出现,可以认为此时已经宕机了。

     于是结论是:500线程1s启动的时候宕机了。

      (3)TPS稳定时的响应时长:

      那么调整线程数,达到让tps稳定:

    可以看到除了画圈的部分,整体比较稳定,分别对应的是0-20s和49-59s以及1.19-1.39s,那么查看这几个区间的响应时间:

    那么可以看到这写区间的响应时间,但是这个图并不是很好,因为刻度太大了,我们只能估摸着来,稳定的时候大概在1.5s左右,不过很多值是小于这个数的

     2.那么接下来就是模拟缓存穿透的情况:想想一想要怎么模拟,而且缓存穿透是什么?

      这样说吧,本来存在缓存的时候,请求会从环中取出数据,而有的时候突然跑到了数据库中去拿数据,就是缓存穿透了,缓存没能拦住这个请求。也就是说要创走啊这样一个情况:让请求又从缓存拿的,有从数据库拿的,然后对比一下情况。看看缓存穿透的时候会发生些什么。

      那么需要在代码里面更改一些,加上一个判断,来查看一波

    public static int i =0;//定义全局静态变量,来保存数据

    public ListgetAllPros(){

    i++;

       System.out.println(i);

       List pross;

       if (redisUtil.get("pross") !=null&&i%9!=0){

    pross = (List)redisUtil.get("pross");

           System.out.println("从缓存中取到的哦");

        //   return pross;

       }else{

    pross =pageDao.getAllPros();

           redisUtil.set("pross",pross);

           System.out.println("从数据库取到的哦");

         //  return pross;

       }

    return pross;

    }

      这样的话,只有9的倍数次访问的时候才会模拟击穿缓存。

    很清晰。

    然后在使用jmeter测试的时候效果并不直观,数据太过笼统,于是选择了postman来测试:

    这是一次缓存穿透的响应时间。然后下面是直接使用缓存的:

    然后赶上下一次的穿透:

    还是比较直观的,大概20%的提升吧,而且我觉得在多线程访问的时候肯定效果更好。

    相关文章

      网友评论

          本文标题:Redis使用压测报告

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