Redis連接池配置及初始化實(shí)現(xiàn)
加入db選擇后的redis連接池配置代碼
public class RedisPoolConfigure {
//Redis服務(wù)器IP
private String ADDR ;
//Redis的端口號(hào)
private int PORT ;
//可用連接實(shí)例的最大數(shù)目
private int MAX_ACTIVE ;
//pool中的idle jedis實(shí)例數(shù)
private int MAX_IDLE ;
//等待可用連接的最大時(shí)間,單位毫秒
private int MAX_WAIT ;
//超時(shí)時(shí)間,單位毫秒
private int TIME_OUT ;
//設(shè)置的逐出策略類(lèi)名, 默認(rèn)DefaultEvictionPolicy(當(dāng)連接超過(guò)最大空閑時(shí)間,或連接數(shù)超過(guò)最大空閑連接數(shù))
private String EVICTION_POLICY_CLASS_NAME ;
//連接耗盡時(shí)是否阻塞, false報(bào)異常,ture阻塞直到超時(shí)
private boolean BLOCK_WHEN_EXHAUSTED;
//是否啟用pool的jmx管理功能, 默認(rèn)true
private boolean JMX_ENABLED;
//在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行validate操作;如果為true,則得到的jedis實(shí)例均是可用的;
private boolean TEST_ON_BORROW ;
//服務(wù)器密碼
private String REDIS_PASS;
//redis選擇數(shù)據(jù)庫(kù)DB
private int REDIS_DB;
private String LUASHA;
private Map<String, String> configure = null;
/**
* 根據(jù)配置文件,將RedisPool連接配置初始化
*/
public RedisPoolConfigure(){
try {
configure = new ConfigureReader().readProperties("redis.properties");
} catch (IOException e) {
e.printStackTrace();
}
this.ADDR = configure.get("REDIS.ADDR");
this.LUASHA = configure.get("REDIS.LUA_HASH");
this.EVICTION_POLICY_CLASS_NAME = configure.get("REDIS.EVICTION_POLICY_CLASS_NAME");
this.BLOCK_WHEN_EXHAUSTED = Boolean.parseBoolean(configure.get("REDIS.BLOCK_WHEN_EXHAUSTED"));
this.JMX_ENABLED = Boolean.parseBoolean(configure.get("REDIS.JMX_ENABLED"));
this.TEST_ON_BORROW = Boolean.parseBoolean(configure.get("REDIS.TEST_ON_BORROW"));
this.REDIS_PASS=configure.get("REDIS.PASS");
if(typeCheck()){
this.PORT = new Integer(configure.get("REDIS.PORT"));
this.MAX_ACTIVE = new Integer(configure.get("REDIS.MAX_ACTIVE"));
this.MAX_IDLE = new Integer(configure.get("REDIS.MAX_IDLE"));
this.MAX_WAIT = new Integer(configure.get("REDIS.MAX_WAIT"));
this.REDIS_DB=new Integer(configure.get("REDIS.DB"));
}else{
System.out.println("error");
}
}
/**
* 輔助工具,檢查map中數(shù)據(jù)的類(lèi)型
* @return
*/
private boolean typeCheck() {
if (isNumeric(configure.get("REDIS.PORT"))
&& isNumeric(configure.get("REDIS.MAX_ACTIVE"))
&& isNumeric(configure.get("REDIS.MAX_IDLE"))
&& isNumeric(configure.get("REDIS.MAX_WAIT"))
&& isNumeric(configure.get("REDIS.DB"))) {
return true;
}
return false;
}
public String getADDR() {
return ADDR;
}
public int getPORT() {
return PORT;
}
public int getMAX_ACTIVE() {
return MAX_ACTIVE;
}
public int getMAX_IDLE() {
return MAX_IDLE;
}
public int getMAX_WAIT() {
return MAX_WAIT;
}
public int getTIME_OUT() {
return TIME_OUT;
}
public boolean isTEST_ON_BORROW() {
return TEST_ON_BORROW;
}
public String getEVICTION_POLICY_CLASS_NAME() {
return EVICTION_POLICY_CLASS_NAME;
}
public boolean isBLOCK_WHEN_EXHAUSTED() {
return BLOCK_WHEN_EXHAUSTED;
}
public boolean isJMX_ENABLED() {
return JMX_ENABLED;
}
/**
* 判斷傳入的數(shù)據(jù)是否為純數(shù)字構(gòu)成
* @param str
* @return
*/
public boolean isNumeric(String str) {
if(str==null || "".equals(str)){
return false;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
public String getLUASHA() {
return LUASHA;
}
public void setLUASHA(String lUASHA) {
LUASHA = lUASHA;
}
public String getREDIS_PASS() {
return REDIS_PASS;
}
public void setREDIS_PASS(String rEDIS_PASS) {
REDIS_PASS = rEDIS_PASS;
}
public int getREDIS_DB() {
return REDIS_DB;
}
public void setREDIS_DB(int rEDIS_DB) {
REDIS_DB = rEDIS_DB;
}
}
redis連接池初始化、獲取Jedis實(shí)例和釋放Jedis實(shí)例
/**
* jedis的連接池,返回未封裝的jedis對(duì)象
* 一般只有在RedisCache類(lèi)提供的操作粒度不足使用時(shí)才使用此類(lèi)提供的原生jedis方法
* @author Hector
*
*/
public class RedisPool {
private static JedisPool jedisPool = null;
/**
* 初始化Redis連接池
*/
static {
try {
RedisPoolConfigure configure = new RedisPoolConfigure();
JedisPoolConfig config = new JedisPoolConfig();
config.setBlockWhenExhausted(configure.isBLOCK_WHEN_EXHAUSTED());
config.setEvictionPolicyClassName(configure.getEVICTION_POLICY_CLASS_NAME());
config.setJmxEnabled(configure.isJMX_ENABLED());
config.setMaxIdle(configure.getMAX_IDLE());
config.setMaxTotal(configure.getMAX_ACTIVE());
config.setMaxWaitMillis(configure.getMAX_WAIT());
config.setTestOnBorrow(configure.isTEST_ON_BORROW());
jedisPool = new JedisPool(config, configure.getADDR(), configure.getPORT(), configure.getTIME_OUT(),configure.getREDIS_PASS(),configure.getREDIS_DB());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取Jedis實(shí)例
* @return
*/
public synchronized static Jedis getJedis() {
Jedis resource=null;
try {
if (jedisPool != null) {
resource = jedisPool.getResource();
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 釋放jedis資源
* @param jedis
*/
public static void close(final Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
public static JedisPool getJedisPool() {
return jedisPool;
}
}
到此這篇關(guān)于Redis連接池配置及初始化實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis連接池配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redisson?框架中的分布式鎖實(shí)現(xiàn)方法
這篇文章主要介紹了Redisson?框架中的分布式鎖,實(shí)現(xiàn)分布式鎖通常有三種方式:數(shù)據(jù)庫(kù)、Redis 和 Zookeeper,我們比較常用的是通過(guò) Redis 和 Zookeeper 實(shí)現(xiàn)分布式鎖,需要的朋友可以參考下2024-03-03
Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用詳解
Redis的List是一種有序的字符串集合,支持兩端高效插入和刪除,適用于隊(duì)列和棧,這篇文章主要介紹了Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用的相關(guān)資料,需要的朋友可以參考下2024-12-12
Redisson如何解決Redis分布式鎖提前釋放問(wèn)題
本文主要介紹了Redisson如何解決Redis分布式鎖提前釋放問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
redis 限制內(nèi)存使用大小的實(shí)現(xiàn)
這篇文章主要介紹了redis 限制內(nèi)存使用大小的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Redis?緩存淘汰策略和事務(wù)實(shí)現(xiàn)樂(lè)觀鎖詳情
這篇文章主要介紹了Redis緩存淘汰策略和事務(wù)實(shí)現(xiàn)樂(lè)觀鎖詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07
Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式
這篇文章主要介紹了Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
redis集群搭建_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了redis集群搭建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

