首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jedis -何时使用returnBrokenResource()

Jedis -何时使用returnBrokenResource()
EN

Stack Overflow用户
提问于 2013-06-13 16:06:55
回答 3查看 8.2K关注 0票数 11

我们应该在什么时候使用这个方法。在JedisConnectionException、JedisDataException或任何JedisException上。据我所知,Jedis没有很好的API文档。

代码语言:javascript
复制
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);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-14 00:09:40

当对象的状态不可恢复时,您应该使用returnBrokenResource。Jedis对象表示与Redis的连接。当物理连接断开或客户端和服务器之间的同步丢失时,它将变得不可用。

在Jedis中,这些错误由JedisConnectionException表示。因此,对于这个异常,我将使用returnBrokenResource,而不是其他异常。

JedisDataException更多地与Jedis API的不良使用或服务器端Redis错误有关。

JedisException用于其他所有事情(通常在发生较低级别的错误后引发,独立于Jedis)。

票数 10
EN

Stack Overflow用户

发布于 2016-01-26 18:26:05

为后来者准备!

不推荐使用returnBrokenResource()、returnResource()。只需在finally块中安全地使用jedis.close()即可。

代码语言:javascript
复制
finally {
  if (jedis != null) {
    jedis.close();
  }
}

如果Jedis是从池中借用的,它将以正确的方法返回到池中,因为它已经确定发生了JedisConnectionException。如果Jedis不是从池中借来的,它将被断开连接并关闭。

票数 11
EN

Stack Overflow用户

发布于 2014-11-25 01:05:10

根据jedis文档编写的示例代码

代码语言:javascript
复制
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);
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17082163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档