`

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

相关推荐

    SQL数据库默认实例与命名实例的区别

    ### SQL数据库默认实例与命名实例的区别 在SQL Server中,实例是服务器上SQL Server服务的具体实现。当安装SQL Server时,可以选择安装默认实例或者命名实例。这两种实例类型各有其特点和适用场景,本文将深入探讨...

    oracle删除和重建实例

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

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

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

    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)...

    MCGS高级教程实例模板

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

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

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

    opengl 实例实例实例实例实例

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

    labview55个经典实例

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

    《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 ...

    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单片机...

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

    本文将深入探讨这些"python 脚本实例 编程实例 入门实例",帮助你理解Python的基本概念和常用操作。 1. **变量与数据类型** Python中的数据类型包括整型(int)、浮点型(float)、字符串(str)和布尔型(bool)...

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

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

    Zemax设计实例500.zip

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

Global site tag (gtag.js) - Google Analytics