并发情况下Redis连接池不够
但是检查了连接数只有几十个,但是应用一直报Redis连接池不够
不知道是不是下面这段代码关闭有问题
/**
* 处理 jedis请求
*
* @param j 处理逻辑,通过 lambda行为参数化
* @return 处理结果
*/
private <T> T excuteByJedis(JedisExecutor<Jedis, T> j) throws RedisConnectException {
Jedis jedis = jedisPool.getResource();
try{
return j.excute(jedis);
} catch (Exception e) {
throw new RedisConnectException(e.getMessage());
}finally {
if(jedis != null){
jedis.close();
}
}
}
Redis配置
Jedis jedis = jedisPool.getResource();
用完后释放一下。
查看:
方法1:在redis-cli命令行使用:info clients可以查看当前的redis连接数
127.0.0.1:6379> info clients
#Clients
connected_clients:621
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>
方法2:config get maxclients 可以查询redis允许的最大连接数
127.0.0.1:6379> CONFIG GET maxclients
##1) "maxclients"
##2) "10000"
127.0.0.1:6379>
设置:
1. 在2.6之后版本,可以修改最大连接数配置,默认10000,可以在redis.conf配置文件中修改
...
# maxclients 10000
...
2.config set maxclients num 可以设置redis允许的最大连接数
127.0.0.1:6379> CONFIG set maxclients 10
OK
127.0.0.1:6379>
3.启动redis.service服务时加参数--maxclients 100000来设置最大连接数限制
redis-server --maxclients 100000 -f /etc/redis.conf
你的 finally 代码里面加入手动断开连接,有的时候他自己不会断开连接,一直占用
RedisClient.getInstance().closeJedis(jedis);