RedisHandler实例

本文详细介绍了如何使用Redis连接池进行资源管理,并在获取失败时实现重试机制,确保了Redis操作的稳定性和高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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);
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值