redis.clients.jedis.exceptions.JedisException:无法将资源返回到池中

Kun*_*Ray 4 java multithreading jedis

我在尝试从 jedis 池返回资源时遇到错误。代码如下。

Jedis publisherJedis = jedispool.getResource();
if(!redisPassword.equals(""))
    publisherJedis.auth(redisPassword);
publisherJedis.publish(channel,data);
log.debug("Publisher jedis is connected: " + publisherJedis.isConnected());
log.debug("Jsondata is added into the queue " + data);
try {
    jedispool.returnResource(publisherJedis);
    jedispool.destroy();
    publisherJedis.close();
} catch (Exception e) {
    e.printStackTrace();
    log.error("Exception occured in returing resource " + e);
}
Run Code Online (Sandbox Code Playgroud)

Kun*_*Ray 5

我在应用程序中的其他地方关闭了 redis 客户端,这就是为什么当我要关闭 redis 客户端时它会抛出异常。此外,我还注意到我们在使用 redis 客户端时应该更加小心。如果我们从 Redis 池中获取资源,那么我们还必须在使用后断开它们的连接。如果我们不这样做,那么客户端将会增加,并且在达到 maxSizeClient 限制后,它也会抛出异常。我在 start 方法中进行了更改出版商。

public void start(JedisPool jedispool, Jedis publisherJedis, String channel,String data, String redisPassword)
{
    if(!redisPassword.equals(""))
        publisherJedis.auth(redisPassword);
    publisherJedis.publish(channel,data);
    log.debug("Jsondata is added into the queue " +data);
    try{
        publisherJedis.close();
        log.debug(" Is Jedis connected " +publisherJedis.isConnected());
        if(publisherJedis.isConnected())
            publisherJedis.disconnect();
        log.debug(" After disconnecting: is redis connected  " +publisherJedis.isConnected());
    }catch(Exception e){
        log.debug("Error occured " +e);
    }
}
Run Code Online (Sandbox Code Playgroud)