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);
}
}
}
分享到:
相关推荐
### SQL数据库默认实例与命名实例的区别 在SQL Server中,实例是服务器上SQL Server服务的具体实现。当安装SQL Server时,可以选择安装默认实例或者命名实例。这两种实例类型各有其特点和适用场景,本文将深入探讨...
删除和重建 Oracle 实例 Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级数据库应用中。然而,在某些情况下,我们需要删除和重建 Oracle 实例,以便解决一些问题或进行升级维护。在这篇文章中,我们将...
Proteus单片机仿真实例源码-32x16汉字.zip Proteus单片机仿真实例源码-44行列键盘.rar Proteus单片机仿真实例源码-44行列键盘.zip Proteus单片机仿真实例源码-485全双工通信.rar Proteus单片机仿真实例源码-485全...
实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例5 如何使用状态栏控件 实例6 如何使用托盘控件 实例7 如何使用标签页控件 实例8 如何使用进度条控件 ...
### SQL Server 2008 R2 添加实例的详细步骤 #### 一、概述 SQL Server 2008 R2 是一款强大的关系型数据库管理系统,广泛应用于企业级数据管理和处理场景。对于需要在同一台服务器上运行多个独立的SQL Server环境...
QT5开发及实例配套[源代码] Qt是诺基亚公司的C++可视化开发平台,本书以Qt 5作为平台,每个章节在简单介绍开发环境的基础上,用一个小实例,介绍Qt 5应用程序开发各个方面,然后系统介绍Qt 5应用程序的开发技术,...
本实例集合将深入探讨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高级教程实例模板...
java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象与类实例java对象...
opengl 实例实例实例实例实例opengl 实例实例实例实例实例
下面我们将围绕"LabVIEW 55个经典实例"这一主题,探讨这些实例可能涵盖的知识点,以及它们如何帮助用户提升LabVIEW技能。 1. **基础编程概念**:这55个实例可能会包含基础的编程概念,如循环(For Loop, While Loop...
第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++编程教程,它以实践为主导,通过丰富的实例帮助学习者掌握C++语言的基础和核心概念。这本书的每个实例都精心设计,旨在帮助初学者和有经验的开发者巩固和提升C++编程技能。 ...
最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例最新单片机仿真 8255并行口扩展实例...
githubsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析.txtsakuracat简介及应用实例及实例分析.txt简介及应用实例及实例分析....
51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机Proteus仿真实例 闪烁LED51单片机...
本文将深入探讨这些"python 脚本实例 编程实例 入门实例",帮助你理解Python的基本概念和常用操作。 1. **变量与数据类型** Python中的数据类型包括整型(int)、浮点型(float)、字符串(str)和布尔型(bool)...
C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++...
《Zemax设计实例500.zip》是一款包含大量光学设计实例的资源包,对于学习和提升光学设计技能的初学者及专业人士来说极具价值。Zemax是业界广泛使用的光学设计软件,它提供了强大的优化和分析工具,使得复杂光学系统...