zoukankan      html  css  js  c++  java
  • redis配置引发的问题

    在配置时配置了引入redis实例之前都有检查其是否可用:

     JedisPoolConfig config = new JedisPoolConfig();
                // 最大连接数
                config.setMaxTotal(maxTotal);
                // 最大连接空闲数
                config.setMaxIdle(maxIdle);
                //最大等待时间
                config.setMaxWaitMillis(maxWaitMillis);
                /*引入redis实例时检查其是否可用
                若开启,每一次获取redis实例时会先ping一下redis,才进行命令的发送,并且出现了有get命令直接返回PONG
                config.setTestOnBorrow(testOnBorrow);*/
                return new JedisPool(config, host, port);

    在实际应用中发现从jedis中get命令效率不高,我本地连接远程,一次耗时40-50ms,并且在有一定并发量的时候get命令返回的值为PONG

    原因:开启了检查是否可用时在引入每个redis时都会发送ping命令,造成效率较低,在有一定并发量的时候通过看redis监控发现在返回PONG时,redis后台服务器此时接收到两个接连的ping命令,导致将PONG返回给了get命令,并且接口耗时比较高

    看redis后台监控:

    去掉该配置后:接口耗时减少一半,不再出现get命令返回PONG的情况,但并发量大时也会出现socket closed的错误(寻找答案中)

    redis后台监控:

    建议慎用该配置:一、配置就意味着会多执行一条命令,效率较低

            二、高并发场景下会出现返回pong的情况

  • 相关阅读:
    Oracle 11g系列:函数与存储过程
    Oracle 11g系列:视图
    Oracle 11g系列:约束
    Oracle 11g系列:数据表对象
    Oracle 11g系列:数据库
    Oracle 11g系列:SQL Plus与PL/SQL
    Ext.util.TaskRunner定时执行任务
    MS SQL Server存储过程
    UML基础:用例图Use Case Diagram(1)
    UML基础系列:类图
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/12635011.html
Copyright © 2011-2022 走看看