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的情况

原文地址:https://www.cnblogs.com/zhaolei1996/p/12635011.html