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);
}
}
}
分享到:
相关推荐
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实例
j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例j2ee实例
实例1 如何使用错误提醒控件 实例2 如何使用信息提示控件 实例3 如何使用菜单控件 实例4 如何使用工具栏控件 实例5 如何使用状态栏控件 实例6 如何使用托盘控件 实例7 如何使用标签页控件 实例8 如何使用进度条控件 ...
数据结构实践教程:内含17个经典数据结构实例 根据五个不同数据结构,对每个结构都有2~4个经典实例。每个实例都有项目简介、设计思路、数据结构、完整程序、运行结果五个部分,可以直接拿来做一篇课程设计。实例名称...
js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、js实例大全、
mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例mvc学习实例
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
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 编程...
C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++...
软件测试用例实例 功能描述:用户通过用户界面输入信息,然后提交,信息保存至数据库,客户端提示提交成功。测试需求分析:UI、用户的输入校验、数据库表更新、系统提示信息 软件测试用例实例 功能描述:用户通过...
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实例
NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例NSIS脚本实例
C++编程实例100篇,里面有很多很基础的编程实例,可以作为参考。
C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 经典 实例 C语言 实例 精粹 ...
python入门实例,精心编制含100个编程实例,是初学者必备的脚本实例。