我们应该在什么时候使用这个方法。在JedisConnectionException、JedisDataException或任何JedisException上。据我所知,Jedis没有很好的API文档。
try {
Jedis jedis = JedisFactory.getInstance();
Pipeline pipe = jedis.pipelined();
Response<Set<Tuple>> idWithScore = pipe.zrangeWithScores(cachekey, from, to);
**// some statement which may cause some other exception**
Response<String> val = pipe.get(somekey);
pipe.exec();
pipe.sync();
}catch (JedisConnectionException e) {
JedisFactory.returnBrokenResource(jedis);
}catch(Exception e){
**// What API I should use here?, how to find whether to use returnBrokenResource(jedis) or returnResource(jedis)**
}finally{
JedisFactory.returnResource(jedis);
}发布于 2013-06-14 00:09:40
当对象的状态不可恢复时,您应该使用returnBrokenResource。Jedis对象表示与Redis的连接。当物理连接断开或客户端和服务器之间的同步丢失时,它将变得不可用。
在Jedis中,这些错误由JedisConnectionException表示。因此,对于这个异常,我将使用returnBrokenResource,而不是其他异常。
JedisDataException更多地与Jedis API的不良使用或服务器端Redis错误有关。
JedisException用于其他所有事情(通常在发生较低级别的错误后引发,独立于Jedis)。
发布于 2016-01-26 18:26:05
为后来者准备!
不推荐使用returnBrokenResource()、returnResource()。只需在finally块中安全地使用jedis.close()即可。
finally {
if (jedis != null) {
jedis.close();
}
}如果Jedis是从池中借用的,它将以正确的方法返回到池中,因为它已经确定发生了JedisConnectionException。如果Jedis不是从池中借来的,它将被断开连接并关闭。
发布于 2014-11-25 01:05:10
根据jedis文档编写的示例代码
public String get(String keyName)
{
Jedis redis = null;
try
{
redis = redisPool.getResource();
return redis.get(keyName);
}
catch (JedisConnectionException e)
{
if (redis != null)
{
redisPool.returnBrokenResource(redis);
redis = null;
}
throw e;
}
finally
{
if (redis != null)
{
redisPool.returnResource(redis);
}
}
}https://stackoverflow.com/questions/17082163
复制相似问题