异常描述:

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
	at redis.clients.util.Pool.getResource(Pool.java:22)
	at com.derbysoft.jredis.longkeytest.BorrowObject.run(BorrowObject.java:22)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)
	at redis.clients.util.Pool.getResource(Pool.java:20)
	... 2 more

产生此错误的原因通常是:

一、Redis没有启动

我自己遇到一次这样的问题。汗!
驱动Redis:

cd ~/envs/redis
//启动服务
bin/redis-server conf/redis.conf

二、由于防火墙原因无法连接到Redis

1、服务器防火墙入站规则。

2、访问Redis的应用程序所在主机的出站(端口)规则。

问题出现场景:这个错误会不经意的出现之前打开了防火墙,可是长时间待机,最后开发时候唤醒服务时,会出现防火墙启动,导致客户机无法链接服务器。
解决:
(1)

//关闭防火墙(不推荐,只适合开发环境使用)
systemctl stop firewalld.service

(2)

//开启特定端口(6379)
1>查看哪些端口被打开 netstat -anp | grep 6379
2>关闭端口号:
/sbin/iptables -I INPUT -p tcp --dport 6379-j DROP
3>打开端口号:
/sbin/iptables -I INPUT -p tcp --dport 6379-j ACCEPT

三、IP地址或端口错误

四、Jedis 对象用完以后,要释放掉,不让会一直占用,所以会出现无法获取新的资源。

五、Spring Boot项目,缺少依赖

如果使用Redis与Spring Boot,也会抛出此异常。
如果你使用的是Spring Boot,那么Redis的依赖是不够的,
您还需要从redis.io手动下载并安装Redis,然后将其从终端运行

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐