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

jedis connection settings for high performance and reliablity

我正在使用 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 - 当您 return 资源到池时发送 PING。
  • TestWhileIdle - 从池中的空闲资源定期发送 PING。

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

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