最近在使用redis连接池的时候出现很多问题,现在记下来,也给正在研究的同仁们一点建议;
我使用的是redis-2.4.18,连接池使用的是JedisPool;
在使用过程中,发现redis报各种异常,socket closed,类型转换异常,Could not get a resource from the pool等等;总之没有消停过。
经过一个多星期的整理,发现主要是以下原因导致了这些异常:
1.redis连接池的回收机制;
这应该算是jedis的异常,使用完redis之后,必须将连接进行合理的回收。
回收分为2种:
1.正常回收
returnResource
2.异常回收
returnBrokenResource
回收代码如下:
Jedis redisWhile = null;
try{
redisWhile = RedisFactory.newRedis();
//redis操作
}catch(Exception ex){
if(redisWhile!=null){
RedisFactory.returnDestoryRedis(redisWhile);
}
ex.printStackTrace();
}finally{
RedisFactory.returnRedisPool(redisWhile);
}
每一次使用redis都要try catch;
2.redis的连接不能跨线程
这个当时坑了我很久,一个方法中如果使用了redis连接,那么在收回这个连接之前,代码中不能请求其他的redis连接;
Jedis redisWhile = null;
try{
redisWhile = RedisFactory.newRedis();
test(); //如果这个方法中也包含了redis连接池的请求,那么你悲催了
}catch(Exception ex){
if(redisWhile!=null){
RedisFactory.returnDestoryRedis(redisWhile);
}
ex.printStackTrace();
}finally{
RedisFactory.returnRedisPool(redisWhile);
}
如果保持这两点,那么调试下来应该能解决很多异常了。
分享到:
相关推荐
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
jedisPool配置1
使用redis.clients.jedis.JedisPool配置jedis连接,进行数据缓存操作demo
本篇文章主要介绍了jedispool连redis高并发卡死的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
jedis-2.9.0+commons-pool2-2.4.2redis依赖包亲测可用
主要介绍了Jedis出现connection timeout问题解决方法,使用Jedis的JedisPool连接池解决了这个问题,需要的朋友可以参考下
JedisPool pool = new JedisPool("localhost", 6379); 以下是如何在try-with-resources块中运行单个SET命令: try (Jedis jedis = pool.getResource()) { jedis.set("clientName", "Jedis"); } Jedis实例实现...
4.使用方法:只需要将jar 放入项目 lib 下面 ,然后将redis.properties 文件放入指定文件夹下面,配置系统环境变量名“JAVAAPP_CONFIG_HOME”路径指向存放redis.properties 文件的路径 5.调用类 JedisUtil_...
jedis
Java中使用Jedis操作Redis 文档比较详细, 具体的方法都进行了介绍了, 适合新手, 和老程序员进行复习, jedis api比较乱, 特此整理.
redis数据库需要的额基础jar包;jedis-2.6.2.jar;commons-pool-1.5.3.jar;commons-pool2-2.4.2.jar
该工具包含该了JedisPool等,详情链接http://blog.csdn.net/miniduhua/article/details/76219737
主要介绍了JedisPool资源池优化方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
jedis,jedis api ,jedisPool
jedis和对应的pool,jedis是2.7版 pool是2.3版,使用的时候 解压使用里面的jar包
使用jedis连接池获取的jedis,可减轻redis服务器的压力,提高了运行效率
废弃方法为:JedisPool.returnResource(Jedis);回收资源 Jedis 3.0版本新回收资源: Jedis.close();此版本的close并不是 直接关闭jedis的连接。 注意点二:JedisPoolConfig 连接池 引用的是org.apache.commons.pool1....
pool = new JedisPool(new Config(), "host", 6379); } private Jedis jedis; private String key; //锁状态标志 private boolean locked = false; public RedisLock(String key) { this.key = key; this....
jedis2.3---jedis2.9版本jar包,附赠commons-pool.jar包
包含 commons-pool-1.6.jar jedis.jar两个jar包,亲测可用