Java Jedis远程连接redis异常解决思路,异常描述:Could not get a resource from the pool && connect timed out

折腾一上午在windows server 2012 R2安装了redis windows 版本。本机cmd远程连接服务器上的redis没有问题。
但是java的jedis客户端连接远程的redis又又出现问题!!(整天除了惊喜就是满脑子的疑惑,还担心被导师说你怎么那么笨)

打开日志显示:

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
Caused by: java.net.SocketTimeoutException: connect timed out

Could not get a resource from the pool。
导致这个原因的有很多种,我采取了一一排查的措施。
以下的措施对寻找redis的远程连接的异常原因很有帮助。

1>:本机cmd再次连接远程的redis,顺利连接。排除了服务器防火墙以及端口没配置的问题。
2>:检查jedis的配置问题,特别注意pool = new JedisPool(config, host, port, time out, password);是否忘记了password;
time out的单位是毫秒!!!
3>:jedisPool的最大等待时间maxWaitMillis设置是否合理;
(表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException)
4>:用完的jedis实例是否回收了

按照以上四个步骤的顺序,依次排查

  • 本机能远程连接redis,排除第1种可能;
  • timeout设置合理(10000),注意到单位是毫秒,没有忘记密码,排除第2种可能
  • maxWaitMillis默认一直等待(-1L ),我设置maxWaitMillis为10000足够,排除第3中可能。
  • 用完redis之后发现没有返回资源
    找到问题的所在,于是增加如下代码,实现jedis实例返回连接池
try {
        } catch (Exception e) {
            // TODO: handle exception
            // 释放redis对象
            pool.returnBrokenResource(jedis);
        } finally {
            // 返还到连接池
             pool.returnResource(jedis);
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值