`

RedisHandler实例

阅读更多
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


public class RedisHandler {

	private Logger logger = Logger.getLogger(RedisHandler.class);

	private static String redisHost = PropertiesUtils.getProperties("redisHost");

	private static int redisPort = Integer.valueOf(PropertiesUtils.getProperties("redisPort"));

	private static int redisMaxTotal = Integer.valueOf(PropertiesUtils.getProperties("redisMaxTotal"));

	private static int redisMaxIdle = Integer.valueOf(PropertiesUtils.getProperties("redisMaxIdle"));

	private static int redisMaxWaitMillis = Integer.valueOf(PropertiesUtils.getProperties("redisMaxWaitMillis"));

	private static int redisTimeOut = Integer.valueOf(PropertiesUtils.getProperties("redisTimeOut"));

	private static int redisRetryNum = Integer.valueOf(PropertiesUtils.getProperties("redisRetryNum"));

	/**
	 * 构造器私有
	 */
	private RedisHandler() {
	}

	private static Map<String, JedisPool> maps = new HashMap<String, JedisPool>();

	private static JedisPool getPool(String ip, int port) {

		String key = ip + ":" + port;
		JedisPool pool = null;
		if (!maps.containsKey(key)) {
			JedisPoolConfig config = new JedisPoolConfig();
			config.setMaxTotal(RedisHandler.redisMaxTotal);
			config.setMaxIdle(RedisHandler.redisMaxIdle);
			config.setMaxWaitMillis(RedisHandler.redisMaxWaitMillis);
			config.setTestOnBorrow(true);
			config.setTestOnReturn(true);
			try {
				
				pool = new JedisPool(config, ip, port, RedisHandler.redisTimeOut);
				maps.put(key, pool);
			} catch (Exception e) {
				
				e.printStackTrace();
			}
		} else {
			
			pool = maps.get(key);
		}
		return pool;
	}

	private static class RedisHandlerHolder {
		/**
		 * 静态初始化器,由JVM来保证线程安全
		 */
		private static RedisHandler instance = new RedisHandler();
	}

	public static RedisHandler getInstance() {

		return RedisHandlerHolder.instance;
	}

	/**
	 * 获取Redis默认实例.
	 * 
	 * @return Redis工具类实例
	 */
	public Jedis getDefaultJedis() {

		String ip = RedisHandler.redisHost;
		int port = RedisHandler.redisPort;
		Jedis jedis = null;
		int count = 0;
		do {
			try {
				jedis = getPool(ip, port).getResource();
			} catch (Exception e) {
				logger.error("获取redis缓存的对象数据时----》", e);
				// 销毁对象
				getPool(ip, port).returnBrokenResource(jedis);
			}
			count++;
		} while (jedis == null && count < RedisHandler.redisRetryNum);

		return jedis;
	}

	protected Jedis getJdeis(String ip, int port) {

		Jedis jedis = null;
		int count = 0;
		do {
			try {
				jedis = getPool(ip, port).getResource();
			} catch (Exception e) {
				logger.error("获取redis缓存的对象数据时----》", e);
				// 销毁对象
				getPool(ip, port).returnBrokenResource(jedis);
			}
			count++;
		} while (jedis == null && count < RedisHandler.redisRetryNum);

		return jedis;
	}

	/**
	 * 
	 * @Title
	 * @Description 释放redis实例到连接池
	 * @param jedis
	 * @param ip
	 * @param port
	 */
	protected void closeJedis(Jedis jedis, String ip, int port) {

		if (jedis != null) {

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

	/**
	 * 
	 * @Title
	 * @Description 释放系统默认redis实例到连接池
	 * @param jedis
	 */
	public void closeDefaultJedis(Jedis jedis) {

		if (jedis != null) {

			getPool(RedisHandler.redisHost, RedisHandler.redisPort).returnResource(jedis);
		}
	}
	
	/**
	 * 
	 * @Title 
	 * @Description 异常是返回连接池
	 * @param jedis
	 */
	public void closeDefaultBrokenResource(Jedis jedis){
		
		if(jedis != null){
			
			getPool(RedisHandler.redisHost, RedisHandler.redisPort).returnBrokenResource(jedis);
		}
	}

}

0
0
分享到:
评论

相关推荐

    uml实例uml实例uml实例uml实例uml实例

    uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例

    vba实例vba实例vba实例vba实例vba实例vba实例

    vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例vba实例

    j2ee实例 j2ee实例j2ee实例

    j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例

    Visual C# .NET精彩编程实例集锦

    实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例5 如何使用状态栏控件 实例6 如何使用托盘控件 实例7 如何使用标签页控件 实例8 如何使用进度条控件 ...

    数据结构实例(内含17个详细经典实例)

    数据结构实践教程:内含17个经典数据结构实例 根据五个不同数据结构,对每个结构都有2~4个经典实例。每个实例都有项目简介、设计思路、数据结构、完整程序、运行结果五个部分,可以直接拿来做一篇课程设计。实例名称...

    js实例大全 js实例

    js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、

    mvc学习实例mvc学习实例mvc学习实例

    mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例

    lucene实例lucene实例

    lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例

    vf实例大全vf实例大全vf实例大全

    vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全vf实例大全

    vbs 编程实例vbs 编程实例

    vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程实例vbs 编程...

    C++编程实例详解 C++编程实例详解

    C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++...

    软件测试用例实例 软件测试用例实例 软件测试用例实例 软件测试用例实例

    软件测试用例实例 功能描述:用户通过用户界面输入信息,然后提交,信息保存至数据库,客户端提示提交成功。测试需求分析:UI、用户的输入校验、数据库表更新、系统提示信息 软件测试用例实例 功能描述:用户通过...

    WPF实例(实例比较多)

    WPF实例(实例比较多) (wpf窗体继承)RibbonStyle2.zip (赛车游戏)GrandPrix_SRC.zip CustomRulesMVVM.zip ExifCompareSource.zip Explorer3D.zip familyshow-12528.zip Jigsaw.zip Life_src.zip PhotoBooth.zip ...

    水晶报表实例水晶报表实例

    水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例水晶报表实例

    webService—Axis实例webService—Axis实例webService—Axis实例

    webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例

    NSIS脚本实例NSIS脚本实例

    NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例

    C++编程实例100篇

    C++编程实例100篇,里面有很多很基础的编程实例,可以作为参考。

    C语言实例精粹(里面全是经典实例)

    C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 ...

    python 脚本实例 编程实例 入门实例

    python入门实例,精心编制含100个编程实例,是初学者必备的脚本实例。

Global site tag (gtag.js) - Google Analytics