Использование параметра JedisPoolConfig *blockWhenExhausted*

Итак, у меня есть проект, в котором я использую Spring-Data-Redis для кэширования некоторых данных. Spring-Data-Redis настраивается с помощью Jedis с использованием Bean Configuration.

Я искал параметры JedisPoolConfig, которые можно изменить, чтобы контролировать поведение моего кэширования и приложения.

Я хотел бы узнать об использовании свойства blockWhenExhausted, которое является частью настраиваемых свойств. Говорят, что значение по умолчанию равно true. Какое поведение вызовет это значение по умолчанию? Если значение изменится на false, к какому поведению это приведет?


person Sulaiman Adeeyo    schedule 13.07.2016    source источник


Ответы (1)


Это значение изменяет поведение GenericObjectPool.borrowObject(длинное заимствованиеMaxWaitMillis)

Заимствуйте объект из пула, используя определенное время ожидания, которое применяется только в том случае, если BaseGenericObjectPool.getBlockWhenExhausted() имеет значение true.

Это означает, что когда вы устанавливаете blockWhenExhausted на false, время, указанное с помощью borrowMaxWaitMillis, не будет использоваться, а вызов borrowObject будет заблокирован до тех пор, пока не будет доступно свободное соединение jedis из пула.

Если пул исчерпан (нет доступных простаивающих экземпляров и нет возможности создавать новые), этот метод либо заблокирует (если BaseGenericObjectPool.getBlockWhenExhausted() имеет значение true), либо выдаст исключение NoSuchElementException (если значение BaseGenericObjectPool.getBlockWhenExhausted() равно false)

Но интересно, я не мог видеть, что реализация JedisPool на самом деле использует метод borrowObject(long borrowMaxWaitMillis). Я мог только видеть, что borrowObject (без параметра) вызывается во время getResource (в версии 3.0.0-SNAPSHOT) . Поэтому я не уверен, применимо ли описанное поведение и к JedisPool.

person brass monkey    schedule 17.07.2016