`

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
分享到:
评论

相关推荐

    oracle删除和重建实例

    删除和重建 Oracle 实例 Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级数据库应用中。然而,在某些情况下,我们需要删除和重建 Oracle 实例,以便解决一些问题或进行升级维护。在这篇文章中,我们将...

    Proteus单片机仿真实例源码大全C51单片机Proteus仿真例程学习实例源代码(150例).zip

    Proteus单片机仿真实例源码-32x16汉字.zip Proteus单片机仿真实例源码-44行列键盘.rar Proteus单片机仿真实例源码-44行列键盘.zip Proteus单片机仿真实例源码-485全双工通信.rar Proteus单片机仿真实例源码-485全...

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

    OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例

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

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

    sqlserver2008R2应用添加实例步骤

    ### SQL Server 2008 R2 添加实例的详细步骤 #### 一、概述 SQL Server 2008 R2 是一款强大的关系型数据库管理系统,广泛应用于企业级数据管理和处理场景。对于需要在同一台服务器上运行多个独立的SQL Server环境...

    QT5开发及实例配套源代码.zip

    QT5开发及实例配套[源代码] Qt是诺基亚公司的C++可视化开发平台,本书以Qt 5作为平台,每个章节在简单介绍开发环境的基础上,用一个小实例,介绍Qt 5应用程序开发各个方面,然后系统介绍Qt 5应用程序的开发技术,...

    j2ee实例 j2ee实例j2ee实例

    本实例集合将深入探讨J2EE的核心概念和技术,帮助开发者更好地理解和应用J2EE。 首先,J2EE的核心组件包括Servlet、JavaServer Pages (JSP)、JavaBean、EJB(Enterprise JavaBeans)、JMS(Java Message Service)...

    《Visual Basic 2008应用程序开发实例精讲》全书所有实例程序源代码

    第2篇 数据库应用开发实例 第3章 家庭理财系统54 3.1 实例功能说明54 3.2 系统设计方案55 3.2.1 模块设计及开发环境55 3.2.2 系统结构图55 3.2.3 数据库设计56 3.3 相关技术点拨58 3.3.1 ado.net数据库访问技术58 ...

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java

    java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象...

    opengl 实例实例实例实例实例

    opengl 实例实例实例实例实例opengl 实例实例实例实例实例

    MCGS高级教程实例模板

    MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板MCGS高级教程实例模板...

    C++编程实例100篇

    《C++编程实例100篇》是一本深入浅出的C++编程教程,它以实践为主导,通过丰富的实例帮助学习者掌握C++语言的基础和核心概念。这本书的每个实例都精心设计,旨在帮助初学者和有经验的开发者巩固和提升C++编程技能。 ...

    最新单片机仿真 8255并行口扩展实例

    最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例...

    sakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txt

    githubsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析....

    51单片机Proteus仿真实例 闪烁LED

    51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机...

    labview55个经典实例

    下面我们将围绕"LabVIEW 55个经典实例"这一主题,探讨这些实例可能涵盖的知识点,以及它们如何帮助用户提升LabVIEW技能。 1. **基础编程概念**:这55个实例可能会包含基础的编程概念,如循环(For Loop, While Loop...

    【gpio详解及应用实例】gpio详解及应用实例gpio详解及应用实例

    gpiogpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用实例gpio详解及应用...

    Zemax设计实例500.zip

    《Zemax设计实例500.zip》是一款包含大量光学设计实例的资源包,对于学习和提升光学设计技能的初学者及专业人士来说极具价值。Zemax是业界广泛使用的光学设计软件,它提供了强大的优化和分析工具,使得复杂光学系统...

    WPF实例(实例比较多)

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

Global site tag (gtag.js) - Google Analytics