java 访问 redis 数据库 报错。


各位,新年好。还在debug.
问题一:
项目开始时 用java 访问 redis数据库key时没问题,
set get  redis key 都没问题。
运行一段时间后访问就会报错。
java.util.NoSuchElementException: Unable to validate object
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:506)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
at redis.clients.util.Pool.getResource(Pool.java:49)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:99)
at cc.messcat.dao.redis.JedisClientSingle.exists(JedisClientSingle.java:17)

出错代码:
Jedis jedis = jedisPool.getResource();

问题二:
下面两个报错有区别吗?
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool

11 个解决方案

#1


[
用 redis-cli.exe 客户端去访问 redis 的key , 用 redis-cli.exe 客户端去访问 redis 的key  是可以的,没问题。
项目运行一段时间用java 代码访问就有报上面的错了。,
都还没回来上班吗? 还是分不够啊?版主, 不会是有不同版本的相关Jar包吧, 是链接池有问题吧?, 注意看一下你的资源有没有关闭,有可能是连接一直被占用, 运行一段时间就达到了连接的上限,,
引用 5 楼 u013122534 的回复:
是链接池有问题吧?


操作完  jedis.close();  就关闭了。,
引用 6 楼 bree06 的回复:
注意看一下你的资源有没有关闭,有可能是连接一直被占用, 运行一段时间就达到了连接的上限,


操作完  jedis.close();  就关闭了。, 用完要释放
jedisPool.returnResource(jedis);

不是jedis.close();,
引用 9 楼 qq_30831935 的回复:
用完要释放
jedisPool.returnResource(jedis);

不是jedis.close();

pool.returnResource(Jedis) 是过时的。
jedis.close()取代pool.returnResource(Jedis) , 程序中是不是大量使用了带有过期时间的key?
如果是的话,那就是Redis进行被动过期清理时,造成Redis短暂的阻塞,从而导致连接失败]
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告