测试类:
public class TestRedis {
/** * @创建时间:2017-10-26 * @创建者: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();
}
}
服务类:
/**
* @创建日期:2017-10-26
* @包路径:org.meter.redis.pool.RedisPoolService.java
* @创建者:meter
* @描述:
* @版权: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;
/**
* @创建日期:2017-10-26
* @创建者:meter
* @描述:
* @版权:copyright@2017
*/
public class RedisPoolService {
private Logger logger = LoggerFactory.getLogger(RedisPoolService.class);
// Redis服务器IP
private String HOST = "127.0.0.1";
// Redis的端口号
private int PORT = 6379;
// 可用连接实例的最大数目,默认值为8;
// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
private int MAX_ACTIVE = 1024;
// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
private int MAX_IDLE = 200;
// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
private int MAX_WAIT = 10000;
// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
private boolean TEST_ON_BORROW = false;
private String PASSWORD=null;
private Boolean isAuth=false;
private JedisPool jedisPool = null;
private static RedisPoolService instance;
/**
* 构造函数
*/
private RedisPoolService(){
init();
}
static{
instance=new RedisPoolService();
}
/**
* @创建时间:2017-10-26
* @创建者: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();
}
}
/**
* @创建时间:2017-10-26
* @创建者: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配置参数失败。",e);
}
}
/**
* @创建时间:2017-10-26
* @创建者:meter
* @返回值类型:Jedis
* @描述:获取Jedis实例
* @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连接池参数配置
#主机IP地址
redis.host=192.168.4.154
#服务器端口
redis.port=6380
#是否开启密码认证
redis.isAuth=true
#如果开启了认证时的密码
redis.password=admin1234
#可用连接实例的最大数目,默认值为8。如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
redis.max_active=100
#控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
redis.max_idle=10
#等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
redis.max_wait=30000
#在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的。
redis.test_on_borrow=false