同事使用redis做了分布式的集中去重,类似消息的唯一性的判断。
报错
Could not get a resource from the pool
在帮忙排查问题的时候感觉特别奇怪,这不是告诉我redis的连接池里面没有可连接的东西吗?
为什么会这样?
@Bean
public JedisPool redisPoolFactory() {
try {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWait);
jedisPoolConfig.setMaxTotal(maxActive);
jedisPoolConfig.setMinIdle(minIdle);
突然看到他这里将setMaxTotal设置为了maxActive而他开启了20个线程去使用,而maxActive设置的大小是10。
因该是线程把可用资源占用了,然后别的资源进来后无法获取 redis资源,才会报告这个错误吧。。
解决方案调大setMaxTotal设置的值就可以。。。