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的情况
心有多大,天有多高,一起奋斗!!