博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis,java释放资源正确方式,防止redis因resource的异常
阅读量:4042 次
发布时间:2019-05-24

本文共 1082 字,大约阅读时间需要 3 分钟。

服务器报redis 异常,Could not return the resource to the pool,关闭服务器重启后依旧很快挂掉,最终定位到代码上面,原因是redis的关闭导致

错误代码如下:

public Long del(String pName, String key) {		Long keyRemovedCount=-1L;		if (key==null) return null;		Jedis jedis = null;//		try(Jedis jedis = jedisPool.getResource()) {		try{			jedis = jedisPool.getResource();//			ShardedJedis jedis = this.shardedJedisPool.getMasterJedisPool().getResource();;//			LOGGER.info("------delete ------jedis  key:"+pName+key);			keyRemovedCount = jedis.del(pName+key);			jedis.close();		} catch (Exception e) {			LOGGER.error("jedis set error:", e);		} finally{			try{				jedis.close();			} catch(Exception ee){}		}		return keyRemovedCount;	}
jedis的2次close导致,两次送还句柄,如果产生并发量大时会出问题。

正确的释放资源的方式如下,仅支持jdk1.7(含1.7)以上版本

public Long del(String pName, String key) {		Long keyRemovedCount=-1L;		if (key==null) return null;		try(Jedis jedis = jedisPool.getResource()) {			keyRemovedCount = jedis.del(pName+key);		} catch (Exception e) {			LOGGER.error("jedis set error:", e);		}		return keyRemovedCount;	}
在try()中加入Jedis jedis = jedisPool.getResource(),这样会自动释放资源

转载地址:http://ghadi.baihongyu.com/

你可能感兴趣的文章
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-13. if分支语句的灵活使用
查看>>
01Java基础语法-15.for循环结构
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-17. do..while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>