Redis链接中JedisPool报错Could not get a resource from the pool(无法从连接池中获取资源)

Posted 寒松,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis链接中JedisPool报错Could not get a resource from the pool(无法从连接池中获取资源)相关的知识,希望对你有一定的参考价值。

报错如图:

解决方案:

一、从redis服务端入手检查

1、将redis.conf中的bind:127.0.0.1注释掉;
2、将redis.conf中的protected-mode yes改为protected-mode no。

二、检查代码和配置文件

1、检查配置文件

# Redis服务器地址
redis.host=127.0.0.1
# Redis服务器连接端口
redis.port=6379
# Redis服务器连接密码(默认为空)
redis.password=
# 连接超时时间(毫秒)
redis.timeout=10000
# 连接池最大连接数(使用负值表示没有限制)
redis.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
redis.pool.max-wait=-1
# 连接池中的最大空闲连接
redis.pool.max-idle=8
# 连接池中的最小空闲连接
redis.pool.min-idle=0

2、检查代码

可以尝试使用SpringBoot集成的Redis的Starter组件,配置类随便百度搜一下就有,下面的yml里面的配置

spring:
  #redis 配置
  redis:
    database: 1
    host: 127.0.0.1
    lettuce:
      pool:
        max-active: 8   #最大连接数据库连接数,设 0 为没有限制
        max-idle: 8     #最大等待连接中的数量,设 0 为没有限制
        max-wait: -1ms  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
        min-idle: 0     #最小等待连接中的数量,设 0 为没有限制
      shutdown-timeout: 100ms
    password: ''
    port: 6379

如果你还是想用Jedis自己来操作的话,那可能就是你的JedisPool配置有问题了,因为我就是踩的这个坑,

我的Redis是没有配置密码的,我相信很多人自己调试的也是没有密码的,这里不能写空字符串,要写null,要么你就用其他不用配置密码的构造方法JedisPool(final URI uri)、JedisPool(final URI uri, final int timeout)等等找合适自己的。
下面是我的JedisPool对象

	@Bean
    public JedisPool redisPoolFactory() 
        try 
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxIdle(maxIdle);
            jedisPoolConfig.setMaxWaitMillis(maxWait);
            jedisPoolConfig.setMaxTotal(maxActive);
            jedisPoolConfig.setMinIdle(minIdle);
            // 密码为空设置为null
            if (StringUtil.isBlank(password)) 
                password = null;
            
            JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
            logger.info("初始化Redis连接池JedisPool成功!地址: :", host, port);
            return jedisPool;
         catch (Exception e) 
            logger.error("初始化Redis连接池JedisPool异常:", e.getMessage());
        
        return null;
    

解决!

以上是关于Redis链接中JedisPool报错Could not get a resource from the pool(无法从连接池中获取资源)的主要内容,如果未能解决你的问题,请参考以下文章

Redis链接中JedisPool报错Could not get a resource from the pool(无法从连接池中获取资源)

redis中 Could not get a resource from the pool 异常解决

JedisCluster连接redis集群一直报Could not get a resource from the pool

redis数据导出,报错Could not connect to Redis at ip:port: Cannot assign requested address解决方法

redis报错Could not get a resource from the pool 仅登录用户可见

使用java操作redis