首页 > 解决方案 > 释放绝地池

问题描述

在包括这个Jedis 示例在内的大多数示例中,Jedis 池是在我认为处理它的 try..catch 括号中创建的:

try(Jedis jedis = jedisPool.getResource())
{
    some code
}

对我来说这是不可能的,因为我需要在仍然使用 Jedis 池的同时抛出错误,这取决于 Redis 的结果。所以对我来说这只是

Jedis jedis = jedisPool.getResource()

问题是如何最好地处置对象?是 jedis.disconnect 吗?jedis.quit?绝地=空?

有一些类似的问题,但不完全相同。一个关于它给出的错误,另一个关于增加池,另一个关于线程。

标签: redisgarbage-collectiondisposejedis

解决方案


简直了jedis.close()。请参阅Jedis - 何时使用 returnBrokenResource()

您曾经被期望使用jedisPool.returnBrokenResource(jedis)or jedisPool.returnResource(jedis),但jedis.close()会照顾它。

参见Jedis.java

Jedis jedis = null;
try {
    jedis = jedisPool.getResource();

...
}catch (JedisConnectionException e) {
...
}catch (Exception e){
...
} finally {
    if (jedis != null)
        jedis.close();
}

推荐阅读