Redis通过JedisConnectionFactory的fetchJedisConnector方法,从连接池中获取连接,具体过程如下:
继续往下看:
idleObjects是一个LinkedBlockingDeque阻塞队列,
代码“A”位置第一次尝试从这个队列中获取连接,如果获取失败(p==null),那么将进行Create创建连接。
如果创建仍然失败,判断borrowMaxWaitMillis是否小于零,该值赋值点在:
JedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
(1)如果小于0,则执行LinkedBlockingDeque阻塞队列的takeFirst方法。
官方对于takeFirst() 的说明如下:
获取并移除此双端队列的第一个元素,必要时将一直等待可用元素。
着也就是将MaxWaitMillis设置为-1或其他小于零的值时,将不限制最大连接数。
(2)如果大于0,则执行LinkedBlockingDeque阻塞队列的pollFirst方法。
官方对于pollFirst(long timeout, TimeUnit unit) 的说明如下: