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

问题描述 投票:9回答:1

我正在使用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性能存在一定的滞后性。

任何人都可以建议我进一步优化以实现高性能吗?

redis apache-commons jedis
1个回答
14
投票

您配置了3个测试:

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

虽然很高兴知道您的连接仍然存在,但那些onBorrow PING请求在您的请求之前浪费了RTT,而另外两个测试正在浪费宝贵的Redis资源。从理论上讲,即使在PING测试之后连接也会变坏,因此即使发送PING,您也应该在代码中捕获连接异常并处理它。如果您的网络稳定,并且没有太多丢弃,则应删除这些测试并仅在异常捕获中处理此方案。

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

© www.soinside.com 2019 - 2024. All rights reserved.