redis连接池示例
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public final class RedisPool {
//服务器地址
private static String ADDR="localhost";
//服务器端口
private static int PORT=6379;
//权限认证
private static String AUTH="testredis";
//最大连接数
private static int MAX_ACTIVE=20000;
//控制pool中有多少个idle(空闲的)的jedis实例
private static int MAX_IDLE=3000;
//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出
private static int MAX_WAIT=10000;
//超时时间
private static int TIMEOUT=10000;
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
private static boolean TEST_ON_BORROW=true;
private static JedisPool jedisPool=null;
/*
* 初始化连接池
*/
static {
try{
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, ADDR, PORT, TIMEOUT, AUTH);
} catch (Exception e){
e.printStackTrace();
}
}
/*
* 获取Jedis实例
*/
public synchronized static Jedis getJedis(){
try{
if(jedisPool!=null){
Jedis resource=jedisPool.getResource();
return resource;
}else {
return null;
}
} catch(Exception e){
e.printStackTrace() ;
return null;
}
}
}
这里我使用了线程测试后redis连接池的最大连接数
import redis.clients.jedis.Jedis;
public class TestThread extends Thread {
private Jedis jedis;
private RedisPool redisPool=new RedisPool();
private static int i = 0;
private static int MAX=9000;
public void setup() {
jedis=redisPool.getJedis();
System.out.println(jedis.ping() + " " + i++);
}
public void run() {
setup();
}
public static void main(String[] args) {
try {
for (int i = 0; i < MAX; i++) {
TestThread myThread = new TestThread();
myThread.start();
System.out.println("第" + i + "个线程");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}