Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 407|回复: 0

Redis一个异常的解决办法,异常描述:Could not get a resource from the pool

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-26 09:22:11 | 显示全部楼层 |阅读模式

    异常描述:

    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

     

     

    1、产生原因:客户端去redis服务器拿连接(代码描述的是租用对象borrowObject)的时候,池中无可用连接,即池中所有连接被占用,且在等待时候设定的超时时间后还没拿到时,报出此异常。 

    2、解决办法:调整JedisPoolConfig中maxActive为适合自己系统的阀值。 

    <bean id="dataJedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> 
            <property name="maxActive" value="300"/> 
           <property name="maxIdle" value="100"/> 
            <property name="maxWait" value="10000"/> 
            <property name="testOnBorrow" value="true"/> 
    </bean> 

    3、重现: 

    public class BorrowObject implements Runnable {
    private ShardedJedisPool jedisPool;

    public BorrowObject(ShardedJedisPool jedisPool) {
    this.jedisPool = jedisPool;
    }

    @Override
    public void run() {
    ShardedJedis shardedJedis = null;
    try {
    shardedJedis = jedisPool.getResource();
    String value = shardedJedis.hget("LONG_KEY_TEST:AA059E03E0AB7D806E6C351F87404B06C1190", "Roc El Pinar Aparthotel");
    System.out.println(value);
    } catch (Exception e) {
    //logger.error(e);
    e.printStackTrace();
    } finally {
    jedisPool.returnResource(shardedJedis);
    }
    }
    }

     

    public class BorrowObjectTest {
    private ShardedJedisPool jedisPool = null;

    public BorrowObjectTest() {
    List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
    JedisShardInfo jedisShardInfo = new JedisShardInfo("192.168.1.112");
    jedisShardInfo.setTimeout(1000000);
    jedisShardInfos.add(jedisShardInfo);
    jedisPool = new ShardedJedisPool(createJedisConfig(), jedisShardInfos);
    }

    private JedisPoolConfig createJedisConfig() {
    JedisPoolConfig jedisConfig = new JedisPoolConfig();
    jedisConfig.setMaxActive(2);
    jedisConfig.setMaxIdle(2);
    jedisConfig.setMaxWait(5);
    jedisConfig.setTestOnBorrow(true);
    return jedisConfig;
    }

    public static void main(String[] args) {
    BorrowObjectTest borrowObjectTest = new BorrowObjectTest();
    for (int i = 0; i < 300; i++) {
    new Thread(new BorrowObject(borrowObjectTest.jedisPool)).start();
    }
    }
    }

     

    转载自:<a href="http://www.iteye.com/topic/1122212">http://www.iteye.com/topic/1122212</a>

    摘抄自:http://blog.csdn.net/freebird_lb/article/details/7460328

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-23 01:06 , Processed in 0.058333 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表