jedis连接设置可实现高性能和高可靠性



我正在使用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个测试:

  • TestOnBorrow-当您请求资源时发送一个PING请求
  • TestOnReturn-在将资源返回到池时发送一个PING
  • TestWhileIdle-从池中的空闲资源定期发送PINGS

虽然很高兴知道你的连接仍然有效,但那些onBorrow PING请求在你的请求之前浪费了一个RTT,另外两个测试浪费了宝贵的Redis资源。理论上,即使在PING测试之后,连接也可能出错,因此即使发送了PING,也应该在代码中捕获连接异常并进行处理。如果你的网络是稳定的,并且没有太多的丢弃,你应该删除这些测试,只在异常捕获中处理这个场景。

此外,通过设置MaxIdle==MaxTotal,不会从您的池中驱逐资源(好/坏?,取决于您的使用情况)。当您的池耗尽时,在等待空闲资源2分钟后,尝试获取资源将超时。

最新更新