使用redisTemplate高并发下连接池满的问题

用JMeter进行高并发测试的时候,发现报错:

org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; 
nested exception is redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool

连不上redis,是因为连接池不够用了
我用的是redisTemplate来操作redis,而redisTemplate并不会自动释放连接
有一个方法,就是加大最大连接数,但是治标不治本,加到redis.maxIdle=1000了,看似够大了,但连接数一直在增加,迟早会崩

找了很久,最后发现 这个方法可用

在使用redisTemplate的部分用try-catch-finally包起来
在catch-finally中加上,手动断开连接,现在就不会报错了

RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());

现在设置最大连接数redis.maxIdle=100也没事了
在redis-cli中输入 info clients 现在的连接数大概在二三十左右

参考:
https://blog.csdn.net/yulio1234/article/details/76417688

你可能感兴趣的:(Java)