我正在使用Jedis客户端连接到我的Redis服务器。以下是我用于连接Jedis的设置(使用apache公共池):
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setMaxIdle(400);
// Tests whether connections are dead during idle periods
poolConfig.setTestWhileIdle(true);
poolConfig.setMaxTotal(400);
// configuring it for some good max value so that timeout don't occur
poolConfig.setMaxWaitMillis(120000);
到目前为止,通过这些设置,我在可靠性方面没有遇到任何问题(我可以随时获得Jedis连接),但我看到Jedis性能存在一定的滞后性。
任何人都可以建议我进一步优化以实现高性能吗?
您配置了3个测试:
虽然很高兴知道您的连接仍然存在,但那些onBorrow PING请求在您的请求之前浪费了RTT,而另外两个测试正在浪费宝贵的Redis资源。从理论上讲,即使在PING测试之后连接也会变坏,因此即使发送PING,您也应该在代码中捕获连接异常并处理它。如果您的网络稳定,并且没有太多丢弃,则应删除这些测试并仅在异常捕获中处理此方案。
此外,通过设置MaxIdle == MaxTotal,您的池中不会逐出资源(好/坏?,取决于您的使用情况)。当您的池耗尽时,在等待免费资源2分钟后,尝试获取资源将在超时中结束。