package bean;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.util.List;
/**
* Created by Administrator on 2017/5/8 0008.
*/
public class RedisPool {
//连接池配置
static GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
//初始化redis连接池,默认8个最大连接数
static JedisPool jedisPool=null;
static {
//设置最大连接数为默认的5倍
//poolConfig.setMaxTotal(GenericObjectPoolConfig.DEFAULT_MAX_TOTAL*5);
//设置最大空闲连接数为默认的3倍
poolConfig.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE*3);
//设置最小空闲连接数为默认的2倍
poolConfig.setMinIdle(GenericObjectPoolConfig.DEFAULT_MIN_IDLE*2);
//设置开启jmx功能
poolConfig.setJmxEnabled(true);
//设置连接池没有连接后客户端的最大等待时间,毫秒
poolConfig.setMaxWaitMillis(5000);
jedisPool=new JedisPool(poolConfig,"127.0.0.1",6379);
}
public static Jedis getRedisFormPool() {
// Jedis jedis=new Jedis("127.0.0.1",6387);//生成Jedis对象
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
return jedis;
}
/**
* 利用管道流删除,节省请求时间,非原子性
* @param jedis
* @param keys
*/
public static void mdel(Jedis jedis,List<String> keys){
Pipeline pipeline = jedis.pipelined();
for(String key:keys){
pipeline.del(key);
}
//执行命令
pipeline.sync();
//可返回执行结果
// pipeline.syncAndReturnAll();
}
public static void main(String[] args) {
//System.out.println(getRedisFormPool().lrange("a",0,-1));
for(int i=0;i<9;i++){
//不执行redis.close(),可观察到因为连接数到达上限,先阻塞5s,然后报错
System.out.println("ping..."+i);
getRedisFormPool().ping();
}
}
}
客户端异常
1.无法从连接池获得连接。
默认8个连接对象,在没关闭的情况继续去获得,等待maxWaitMillis(>0)后,抛出异常。
//设置连接池没有连接后客户端的最大等待时间,毫秒
poolConfig.setMaxWaitMillis(5000);
public static Jedis getRedisFormPool() {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
} catch (Exception e) {
System.err.println(e.getMessage());
}/* finally {
if (jedis != null) {
jedis.close();
}
}*/
return jedis;
}
2.读写超时后,抛出SocketTImeoutException:Read timed out
3.连接超时后 ,抛出SocketTImeoutException:Connection timed out