實現一個redis連線池

x號開發者發表於2018-12-25

#*****************jedis連線引數設定*********************
#redis伺服器ip
redis.ip=169.254.130.122
#redis伺服器埠號
redis.port=6379
#redis訪問密碼
redis.passWord=test123
#與伺服器建立連線的超時時間
redis.timeout=3000
#************************jedis池引數設定*******************
#jedis的最大活躍連線數
jedis.pool.maxActive=100
#jedis最大空閒連線數
jedis.pool.maxIdle=50
#jedis池沒有連線物件返回時,等待可用連線的最大時間,單位毫秒,預設值為-1,表示永不超時。
#如果超過等待時間,則直接丟擲JedisConnectionException
jedis.pool.maxWait=1500
#從池中獲取連線的時候,是否進行有效檢查
jedis.pool.testOnBorrow=true
#歸還連線的時候,是否進行有效檢查
jedis.pool.testOnReturn=true

 

 

public class RedisPoolUtil {
private static JedisPool jedisPool = null;
private static String redisConfigFile = "redis.properties";
//把redis連線物件放到本地執行緒中
private static ThreadLocal<Jedis> local=new ThreadLocal<Jedis>();

//不允許通過new建立該類的例項
private RedisPoolUtil() {
}

/**
* 初始化Redis連線池
*/
public static void initialPool() {
try {
Properties props = new Properties();
//載入連線池配置檔案
props.load(RedisPoolUtil.class.getClassLoader().getResourceAsStream(redisConfigFile));
// 建立jedis池配置例項
JedisPoolConfig config = new JedisPoolConfig();
// 設定池配置項值
config.setMaxTotal(Integer.valueOf(props.getProperty("jedis.pool.maxActive")));
config.setMaxIdle(Integer.valueOf(props.getProperty("jedis.pool.maxIdle")));
config.setMaxWaitMillis(Long.valueOf(props.getProperty("jedis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(props.getProperty("jedis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(props.getProperty("jedis.pool.testOnReturn")));
// 根據配置例項化jedis池
jedisPool = new JedisPool(config, props.getProperty("redis.ip"),
Integer.valueOf(props.getProperty("redis.port")),
Integer.valueOf(props.getProperty("redis.timeout")),
props.getProperty("redis.passWord"));
System.out.println("執行緒池被成功初始化");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 獲得連線
* @return Jedis
*/
public static Jedis getConn() {
//Redis物件
Jedis jedis =local.get();
if(jedis==null){
if (jedisPool == null) {
initialPool();
}
jedis = jedisPool.getResource();
local.set(jedis);
}
return jedis;
}

//新版本用close歸還連線
public static void closeConn(){
//從本地執行緒中獲取
Jedis jedis =local.get();
if(jedis!=null){
jedis.close();
}
local.set(null);
}

//關閉池
public static void closePool(){
if(jedisPool!=null){
jedisPool.close();
}
}
}

 

相關文章