測試類:
public class TestRedis {
/** * @創(chuàng)建時(shí)間:2017-10-26 * @創(chuàng)建者:meter * @返回值類型:void * @描述:測試redis連接池
?*/
private static void testRedisPool(){Jedis redis=RedisPoolService.getJedis();Setkeys=redis.keys("*");
for(String key:keys){
System.out.println(key+"='"+redis.get(key)+"'");
}
System.out.println(redis.dbSize());
redis.close();
}
public static void main(String[] args) {
//testReids();
testRedisPool();
}
}
服務(wù)類:
/**
* @創(chuàng)建日期:2017-10-26
* @包路徑:org.meter.redis.pool.RedisPoolService.java
* @創(chuàng)建者:meter
* @描述:
* @版權(quán):copyright@2017 by meter !
*/
package org.meter.redis.pool;
import java.util.Properties;
import java.util.ResourceBundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @創(chuàng)建日期:2017-10-26
* @創(chuàng)建者:meter
* @描述:
* @版權(quán):copyright@2017
*/
public class RedisPoolService {
private? Logger logger = LoggerFactory.getLogger(RedisPoolService.class);
// Redis服務(wù)器IP
private? String HOST = "127.0.0.1";
// Redis的端口號(hào)
private? int PORT = 6379;
// 可用連接實(shí)例的最大數(shù)目揪胃,默認(rèn)值為8;
// 如果賦值為-1沽翔,則表示不限制蛛倦;如果pool已經(jīng)分配了maxActive個(gè)jedis實(shí)例,則此時(shí)pool的狀態(tài)為exhausted(耗盡)锰瘸。
private? int MAX_ACTIVE = 1024;
// 控制一個(gè)pool最多有多少個(gè)狀態(tài)為idle(空閑的)的jedis實(shí)例粹淋,默認(rèn)值也是8监透。
private? int MAX_IDLE = 200;
// 等待可用連接的最大時(shí)間蛋辈,單位毫秒属拾,默認(rèn)值為-1,表示永不超時(shí)冷溶。如果超過等待時(shí)間渐白,則直接拋出JedisConnectionException;
private? int MAX_WAIT = 10000;
// 在borrow一個(gè)jedis實(shí)例時(shí)挂洛,是否提前進(jìn)行validate操作礼预;如果為true眠砾,則得到的jedis實(shí)例均是可用的虏劲;
private? boolean TEST_ON_BORROW = false;
private? String PASSWORD=null;
private? Boolean isAuth=false;
private? JedisPool jedisPool = null;
private static RedisPoolService instance;
/**
* 構(gòu)造函數(shù)
*/
private RedisPoolService(){
init();
}
static{
instance=new RedisPoolService();
}
/**
* @創(chuàng)建時(shí)間:2017-10-26
* @創(chuàng)建者:meter
* @返回值類型:void
* @描述:初始化Redis連接池
*/
private? void init() {
try {
initParams();
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, HOST, PORT);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @創(chuàng)建時(shí)間:2017-10-26
* @創(chuàng)建者:meter
* @返回值類型:void
* @描述:讀取配置文件
*/
private? void initParams(){
try{
Properties map=new Properties();
map.load(RedisPoolService.class.getClassLoader().getResourceAsStream("redis.properties"));
String tmpHOST=map.getProperty("redis.host");
if(tmpHOST != null && !"".equals(tmpHOST)){
HOST=tmpHOST.trim();
}
String tmpPASSWORD=map.getProperty("redis.password");
if(tmpPASSWORD != null && !"".equals(tmpPASSWORD)){
PASSWORD=tmpPASSWORD.trim();
}
String tmpPORT=map.getProperty("redis.port").trim();
if(tmpPORT != null && !"".equals(tmpPORT)){
PORT=Integer.parseInt(tmpPORT.trim());
}
String tmpIsAuth=map.getProperty("redis.isAuth");
if(tmpIsAuth != null && !"".equals(tmpIsAuth)){
isAuth=Boolean.parseBoolean(tmpIsAuth.trim());
}
String tmpMAX_ACTIVE=map.getProperty("redis.max_active");
if(tmpMAX_ACTIVE != null && !"".equals(tmpMAX_ACTIVE)){
MAX_ACTIVE=Integer.parseInt(tmpMAX_ACTIVE.trim());
}
String tmpMAX_IDLE=map.getProperty("redis.max_idle");
if(tmpMAX_IDLE != null && !"".equals(tmpMAX_IDLE)){
MAX_IDLE=Integer.parseInt(tmpMAX_IDLE.trim());
}
String tmpMAX_WAIT=map.getProperty("redis.max_wait");
if(tmpMAX_WAIT != null && !"".equals(tmpMAX_IDLE)){
MAX_WAIT=Integer.parseInt(tmpMAX_WAIT.trim());
}
String tmpTEST_ON_BORROW=map.getProperty("redis.test_on_borrow");
if(tmpTEST_ON_BORROW != null && !"".equals(tmpTEST_ON_BORROW)){
TEST_ON_BORROW=Boolean.parseBoolean(tmpTEST_ON_BORROW.trim());
}
}catch(Exception e){
logger.error("讀取redis配置參數(shù)失敗。",e);
}
}
/**
* @創(chuàng)建時(shí)間:2017-10-26
* @創(chuàng)建者:meter
* @返回值類型:Jedis
* @描述:獲取Jedis實(shí)例
* @return
*/
public static Jedis getJedis() {
try {
Jedis resource = instance.jedisPool.getResource();
if (instance.isAuth) {
resource.auth(instance.PASSWORD);
}
return resource;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
配置文件:
#redis連接池參數(shù)配置
#主機(jī)IP地址
redis.host=192.168.4.154
#服務(wù)器端口
redis.port=6380
#是否開啟密碼認(rèn)證
redis.isAuth=true
#如果開啟了認(rèn)證時(shí)的密碼
redis.password=admin1234
#可用連接實(shí)例的最大數(shù)目褒颈,默認(rèn)值為8柒巫。如果賦值為-1,則表示不限制谷丸;如果pool已經(jīng)分配了maxActive個(gè)jedis實(shí)例堡掏,則此時(shí)pool的狀態(tài)為exhausted(耗盡)。
redis.max_active=100
#控制一個(gè)pool最多有多少個(gè)狀態(tài)為idle(空閑的)的jedis實(shí)例刨疼,默認(rèn)值也是8泉唁。
redis.max_idle=10
#等待可用連接的最大時(shí)間鹅龄,單位毫秒,默認(rèn)值為-1亭畜,表示永不超時(shí)扮休。如果超過等待時(shí)間,則直接拋出JedisConnectionException
redis.max_wait=30000
#在borrow一個(gè)jedis實(shí)例時(shí)拴鸵,是否提前進(jìn)行validate操作玷坠;如果為true,則得到的jedis實(shí)例均是可用的劲藐。
redis.test_on_borrow=false