Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。

本篇文章主要讲解,Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。
作者:任聪聪
日期:2024年10月6日01:29:21

报错信息:

报文:

redis  Could not get a resource from the pool  

现象:

file

主要原因:

注意:

1.根本不是网络上所说的那种 需要修改redis配置的。

2.根本不是网络上所说的需要更新redis版本的。

3.根本不是网络上所说的需要更新依赖版本的。

4.根本不是连接远程redis就可以解决的。

5.根本不是多线程问题导致的资源枯竭问题。

根本原因说明:

jedis是一个很成熟的依赖,它本身就完美兼容多线程情况下的redis池分配,无需进行额外的配置和修改,只需要按照规范的写法书写jedis的pool即可。

造成上述的问题的本质是:

1、线程池外泄,没有使用try 方式进行关闭完毕的连接。

2、没有正确实例化线程池,或使用了外部的动态加载初始化连接池。

3、外部引入了配置文件,实例化pool时进行输入参数。

解决办法:

步骤一、实例化我们的线程池通过如下的方式:

public class xxxxUtils {

	//连接地址
    private static final String host = "localhost";
    //端口
    private static final int port = 6379;
    //密码
    private static final String password = null;
    //数据库
    private static final int database = 10;
    //超时时间
    private static final int timeout = 5000;
    //前缀
    private static final String prefixedKey = "rcc666";
    //最大连接数
    private static final int maxTotal = 100;
    //最大空闲数
    private static final int maxIdle = 20;
    //最小空闲数
    private static final int minIdle = 10;
    //最大等待时间
    private static final Long maxWaitMillis = 1000L;


    private static class JedisPoolHolder {
        private static final JedisPoolConfig poolConfig = new JedisPoolConfig();

        static {
            poolConfig.setMaxTotal(maxTotal); // 最大连接数
            poolConfig.setMaxIdle(maxIdle); // 最大空闲连接数
            poolConfig.setMinIdle(minIdle); // 最小空闲连接数
            poolConfig.setMaxWaitMillis(maxWaitMillis); // 获取连接的最大等待时间
        }

        private static final JedisPool INSTANCE = new JedisPool(poolConfig, host, port, timeout, password, database);
    }

    public static JedisPool getJedisPool() {
        return JedisPoolHolder.INSTANCE;
    }
	
	//引入方式
	    public void yourFunc() {
        try (Jedis jedis = getJedisPool().getResource()) {
            //进行jedis的操作 可以直接jedis.set 或get 同你的方式 这个写法是为了避免线程池资源枯竭 try-catch-swtich 会自动销毁完成的连接
        } catch (Exception e) {
            log.error("错误反馈:", e);
        }
    }

}

备注:使用外部动态配置文件导入配置参数会同样导致jedis报错相同错误,建议此处保持静态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任聪聪

创作不易,你的打赏是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值