java redis释放连接_Java连接redis

public classRedisUtil {protected Logger log =LoggerFactory.getLogger(getClass());private static Map maps = new HashMap();/*** 私有构造器.*/

privateRedisUtil() {

}/*** 获取连接池.

*@return连接池实例*/

private static JedisPool getPool(String ip,intport) {

String key= ip+":" +port;

JedisPool pool= null;if(!maps.containsKey(key)) {

JedisPoolConfig config= newJedisPoolConfig();

config.setMaxActive(RedisConfig.Maxactive);

config.setMaxIdle(RedisConfig.Maxidle);

config.setMaxWait(RedisConfig.Maxwait);

config.setTestOnBorrow(true);

config.setTestOnReturn(true);try{/***如果你遇到 java.net.SocketTimeoutException: Read timed out exception的异常信息

*请尝试在构造JedisPool的时候设置自己的超时值. JedisPool默认的超时时间是2秒(单位毫秒)*/pool= newJedisPool(config, ip, port,RedisConfig.Timeout);

maps.put(key, pool);

}catch(Exception e) {

e.printStackTrace();

}

}else{

pool=maps.get(key);

}returnpool;

}public staticJedisPool getPool()

{returngetPool(RedisConfig.ip,RedisConfig.port);

}/***类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例

*没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。*/

private static classRedisUtilHolder{/*** 静态初始化器,由JVM来保证线程安全*/

private static RedisUtil instance = newRedisUtil();

}/***当getInstance方法第一次被调用的时候,它第一次读取

*RedisUtilHolder.instance,导致RedisUtilHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静

*态域,从而创建RedisUtil的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。

*这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个域的访问,因此延迟初始化并没有增加任何访问成本。*/

public staticRedisUtil getInstance() {returnRedisUtilHolder.instance;

}/*** 获取Redis实例.

*@returnRedis工具类实例*/

private static Jedis getJedis(String ip, intport) {

Jedis jedis= null;int count = 0;do{try{

jedis=getPool(ip, port).getResource();//log.info("get redis master1!");

} catch(Exception e) {//log.error("get redis master1 failed!", e);//销毁对象

getPool(ip, port).returnBrokenResource(jedis);

}

count++;

}while (jedis == null && count

}//重载一下

public staticJedis getJedis()

{returngetJedis(RedisConfig.ip,RedisConfig.port);

}/*** 释放redis实例到连接池.

*@paramjedis redis实例*/

private static void closeJedis(Jedis jedis,String ip,intport) {if(jedis != null) {

getPool(ip,port).returnResource(jedis);

}

}public static voidcloseJedis(Jedis jedis)

{

closeJedis(jedis,RedisConfig.ip,RedisConfig.port);

}/*** 退出然后关闭Jedis连接。如果Jedis为null则无动作。*/

public static voidcloseJedisDirectly(Jedis jedis) {if ((jedis != null) &&jedis.isConnected()) {try{try{

jedis.quit();

}catch(Exception e) {

}

jedis.disconnect();

}catch(Exception e) {

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值