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

异常描述:

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

时间: 2024-08-27 04:22:57

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

异常:未能加载文件或程序集”DAL”或它的某一个依赖项——解决办法

下面是我再使用抽象工厂+反射重构机房时,在Factoy中出现了下面一个问题: 去网上查了一下资料,发现这是一个很普遍的问题,它出现的原因主要有两种: 第一种: 加载DLL路径错误.解决办法是调整D层生成DLL的路径到UI的bin文件夹中.如下图: 反射的一个原则是:一切皆以UI层的bin文件夹中的dll名称为中心,说白一点,dll就是一个类库.我理解的反射,就是一串拼接的字符串,组成要实例化的类的名字.使用反射加载类时,默认是从UI层中的bin中找的,所以要在UI的bin文件夹下生成D层类的dl

Android 常见异常及解决办法

?  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 1)   异常描述:这应该是一个很常见的异常,类似于 C# 中的"未将对象引用

【转】类型初始值设定项引发异常的解决办法

类型初始值设定项引发异常的解决办法 转自:小羊快跑1  http://www.cnblogs.com/SheepRunning/p/4452847.html 今天在调试代码的时候突然抛出了如下异常:"XORM.Database"的类型初始值设定项引发异常. 顿时感觉很突兀,平常的时候一点问题没有,为什么今天调试就出问题了呢?测试了一下,发现在数据处理层的一条实例化代码处出错: //获取类型的映射信息 MappingInfo mapInfo = xmlMapping.GetDataMap

类型初始值设定项引发异常的解决办法

今天在调试代码的时候突然抛出了如下异常:“XORM.Database”的类型初始值设定项引发异常. 顿时感觉很突兀,平常的时候一点问题没有,为什么今天调试就出问题了呢?测试了一下,发现在数据处理层的一条实例化代码处出错: //获取类型的映射信息 MappingInfo mapInfo = xmlMapping.GetDataMapInfo(type); Database db = new Database();//出错代码 db.CommandText = storageprocedure; /

Android开发遇到的异常及解决办法

Android开发遇到的错误及解决方法1. Unable to resolve target 'android-7' 解决方案: 修改工程目录下的default.properties文件里的内容target=android-7改成target=android-12(或者其他版本)就可以了,最好用txt打开,然后修改之后保存,运行就可以了. 原代码如下: # This file is automatically generated by Android Tools.# Do not modify

使用maven时出现Failure to transfer 异常的解决办法

> 使用maven时出现Failure to transfer 错误的解决方法 在eclipse里使用maven,连接nexus私服. 添加依赖之后,总是报添加的依赖jar文件找不到,但是在nexus的库里面能找到这个依赖的jar文件,但是在本地的maven库里面找不到,于是我将本地库里面这个依赖对应的文件夹删掉,然后在eclipse里面执行update dependencies.成功解决问题! 右键单击项目->maven->update dependencies. 引起的原因是由于本地

cocos2d-x发生undefined reference to `XX&#39;异常 一劳永逸解决办法

cocos2d-x发生undefined reference to `XX'错误 一劳永逸解决方法 参考文章: http://blog.csdn.net/kafeidev/article/details/9157895 http://blog.csdn.net/fu_zk/article/details/12836431 eclipse cocos2dx项目,出现错误 E:/Acocos2d-x/cocos2d-1.0.1-x-0.11.0/MyBilliard/android/jni/../.

Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法

android.os.NetworkOnMainThreadException 异常的解决办法, 刚开是把HttpURLConnectionnection 打开连接这个方法放在UI线程里了,可能不是线程安全的,而且这个方法请求是需要等待的,所以就抛出了这个异常,后来用子线程打开的HttpURLConnection, 一切就都正常了,只要在主线程里开启子线程就行了.子线程利用URL 问题解决.下面贴一段代码 String file1 = SERVER_PATH; URL url = new URL

Android Stduio 发生 Process &#39;command &#39;somePath:java.exe&#39;&#39; finished with non-zero exit value 2 异常的解决办法

有时你会发现,在你使用Android Studio 进行编译的时候提示: Error:Execution failed for task ':demo:dexDebug'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'java.exe'' finished with non-zero exit value 2 为什么会这

Tomcat异常及解决办法——持续更新中

公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be l