项目运行开始几分钟还正常运行,之后就会一直显示 Could not get a resource from the pool
好了很多资料也没有解决办法,最后猜测是不是所有的连接使用一个全局jedis,然后每次jedis=jedisPool.getResource(),然后把jedis改成方法每部局部变量,运行一段时间,没有发生上面的问题
原有代码:
Jedis jedis=null; public Object get(Object key) { System.out.println(new Date()+"//get:"+key); Object obj=null; try { jedis = this.getResource(); if(jedis!=null){ jedis.select(DBINDEX); byte[] value=jedis.get(((String)key).getBytes()); if(value!=null)obj=unserizlize(value); } } catch (Exception e) { logger.error("【RedisCache】Exception happened when query["+key+"]:"+e); }finally{ if(null!=jedis) this.returnResource(jedis); } return obj; } public void put(Object key, Object value) { try{ jedis = this.getResource(); if(jedis!=null){ jedis.select(DBINDEX); jedis.set(((String)key).getBytes(), serialize(value)); } }catch (Exception e) { logger.error("【RedisCache】Exception happened when save["+key+"]:"+e); }finally{ if(null!=jedis) this.returnResource(jedis); } } |
修改之后:
public Object get(Object key) { Object obj=null; Jedis jedis=null; try { jedis = this.getResource(); if(jedis!=null){ jedis.select(DBINDEX); byte[] value=jedis.get(((String)key).getBytes()); if(value!=null)obj=unserizlize(value); } } catch (Exception e) { logger.error("【RedisCache】Exception happened when query["+key+"]:"+e); }finally{ if(null!=jedis) this.returnResource(jedis); } return obj; } public void put(Object key, Object value) { Jedis jedis=null; try{ jedis = this.getResource(); if(jedis!=null){ jedis.select(DBINDEX); jedis.set(((String)key).getBytes(), serialize(value)); } }catch (Exception e) { logger.error("【RedisCache】Exception happened when save["+key+"]:"+e); }finally{ if(null!=jedis) this.returnResource(jedis); } } |