目录
一 为什么使用 Jedis 连接池
当使用 Jedis 直连 Redis 的时候,存在每次新建、关闭连接的开销,极端情况可能出现连接泄漏的问题。而使用连接池是说在一个池子里面对连接进行管理,当请求过来之后先从连接池里面借用连接,用完之后再次归还连接。连接池的连接可以得到复用,有利于降低系统开销,提升系统性能。
二 Jedis 使用连接池
2.1 JedisPool 代码
@Configuration
public class JedisClient {
private int minIdle = 1;
private int maxIdle = 8;
private int maxTotal = 256;
private int maxWait = 50;
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestOnReturn(true);
jedisPoolConfig.setBlockWhenExhausted(true);
jedisPoolConfig.setMaxWaitMillis(maxWait);
jedisPoolConfig.setFairness(false);
return jedisPoolConfig;
}
}
2.2 GenericObjectPoolConfig 参数配置说明
- maxIdle :连接池中最大的空闲连接数,默认为 8。
- minIdle:连接池中最少空闲连接数,默认为 0。
- maxTotal:连接池中最大连接数,默认为 8。
- maxWaitMillis:当连接池资源用尽后,调用者的最大等待时间(单位为毫秒),一般不建议使用默认值,该默认值为-1,表示永远不超时,一直等待。
- testOnBorrow:向连接池借用连接时是否做连接有效性检测(ping),无效连接会被移除,每次借用多执行一次 ping 命令,默认值为 false。
- testOnReturn:向连接池归还连接时是否做连接有效性检测(ping),无效连接会被移除,每次归还多执行一次 ping 命令,默认值为 false。
- testOWhileIdle:向连接池借用连接时是否做连接空闲检测,空闲超时的连接会被移除,默认值为 false。
- blockWhenExhausted:当连接池用尽后,调用者是否要等待,这个参数是和 maxWaitMillis 对应的,只有当此参数为 true 时,maxWaitMillis 才会生效。默认值为 true。
- minEvictableIdleTimeMillis:连接的最小空闲时间,达到此值后空闲连接将被移除,默认值 30 分钟。
- timeBetweenEvictionRunsMillis:空闲连接的检测周期(单位为毫秒),默认值为 -1,表示不做检测。
- numTestsPerEvictionRun:做空闲连接检测时,每次的采样数,默认为 3。