数据库

REDIS Could not get a resource from the pool

因为redis的pool是继承commons-pool2的,pool里面的代码

public T getResource() {
    try {
      return internalPool.borrowObject();
    } catch (NoSuchElementException nse) {
      throw new JedisException("Could not get a resource from the pool", nse);
    } catch (Exception e) {
      throw new JedisConnectionException("Could not get a resource from the pool", e);
    }
  }

我个人的经验,可能是2个原因

  • 连接池参数设置太小了,线程一多导致池内资源用完
  • 最可能的原因,其实是资源没有return给pool,如果是旧版本的jedis,要使用returnBrokenResource()或者returnResource(),新版本直接用close()

有一点需要注意,一般我们会选择在finally块中执行资源回收以确保一定执行,但是假如前面获取资源异常的时候,再执行到finally块,会因为资源的引用为空导致空指针异常,所以需要加非空判断
(0)

本文由 永烁星光 作者:linus 发表,转载请注明来源!

热评文章

发表评论