当前位置: 首页 > article >正文

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报错相同错误,建议此处保持静态。


http://www.kler.cn/news/341266.html

相关文章:

  • HyperWorks基于几何投影的网格变形
  • Laravel Filament 如何配置多语言支持
  • HalconDotNet实现分水岭图像分割算法详解
  • Leetcode 下一个排列
  • contact form 7设置方法与详细步骤
  • 网页前端开发之Javascript入门篇(9/9):对象
  • 自动化测试 | alert处理
  • 【深度学习总结】热力图-Grad-CAM使用
  • [持续更新]程序员每天会阅读哪些技术网站(带链接)来提升自己?
  • 谁能跟我比操作系统?
  • Python | Leetcode Python题解之第459题重复的子字符串
  • Nacos-Feign-Gateway-SpringCloud微服务
  • 本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃
  • Python-Pandas
  • java算法OJ(2)链表
  • CUDA、Pytorch、Pycharm的安装与配置
  • 017 平台属性[属性分组、规格参数、销售属性]
  • Android 10.0 修改Systemui三键导航栏虚拟按键颜色功能实现
  • 链表Set_LinkList(并集)
  • 开源城市运动预约的工具类小程序源码