Сегодня я обнаружил, что метод подключения Jedis по умолчанию — jedis=new Jedis("localhost",6379), и всегда происходит тайм-аут соединения. Позже я обнаружил, что в пакете классов jedis также есть способ установить максимальное время соединения.
1-> Для получения экземпляра Jedis необходимо получить его из JedisPool;
2->После использования экземпляра Jedis вам необходимо вернуть его в JedisPool;
3->Если во время использования Jedis допустит ошибку, его также необходимо вернуть в JedisPool;
Код выглядит следующим образом
Скопируйте код кода следующим образом:
Конфигурация JedisPoolConfig = новый JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
пул JedisPool;
пул = новый JedisPool(config, "2xx.xx.xx.14", 6379);
логическое значение кредитаOrOprSuccess = true;
пытаться {
джедис = пул.getResource();
// выполняем выбор Redis по экземпляру
} catch (JedisConnectionException e) {
заимствоватьOrOprSuccess = ложь;
если (джедис != ноль)
Pool.returnBrokenResource(jedis);
} окончательно {
если (заимствоватьОрОпрУспех)
пул.returnResource(джедис);
}
джедис = пул.getResource();
JedisPool зависит от пакета классов Apache
общий пул-1.5.6.jar
1->Хотя выдается исключение JedisConnectionException, на самом деле существует два типа ошибок: один — этоpool.getResource(), который не может получить доступный экземпляр jedis; другой — ошибки во время jedis.set/get также вызывают это исключение; Чтобы реализовать различие, оно реализуется на основе того, имеет ли экземпляр значение NULL, это доказывает, что экземпляр вообще не был инициализирован, поэтому нет необходимости возвращать его в пул; не равно нулю, это доказывает, что его нужно вернуть в пул;
2->При возникновении ошибки экземпляра также необходимо вызвать returnBrokenResource, чтобы вернуть его в пул. В противном случае в буфере экземпляра, полученном через getResource, в следующий раз могут остаться данные, и может возникнуть проблема!
Параметры конфигурации JedisPool во многом зависят от реальных требований приложения и возможностей программного и аппаратного обеспечения. Я никогда раньше не использовал commons-pool, поэтому на этот раз я провел целую комнату, изучая значение этих параметров. . . Большинство параметров конфигурации JedisPool назначаются соответствующими элементами JedisPoolConfig.
maxActive: контролирует, сколько экземпляров jedis может быть выделено в пуле, полученное с помощью Pool.getResource(); если значение равно -1, это означает, что ограничений нет, если в пуле выделены экземпляры maxActive jedis, состояние пула: на этот раз становится исчерпанным в JedisPoolConfig
maxIdle: контролирует максимальное количество экземпляров jedis в состоянии ожидания, которое может иметь пул;
WhenExhaustedAction: указывает действие, которое должно быть выполнено пулом, когда все экземпляры jedis в пуле выделены. По умолчанию существует три типа WHEN_EXHAUSTED_FAIL (что означает, что при отсутствии экземпляра jedis он будет создан напрямую);
NoSuchElementException), WHEN_EXHAUSTED_BLOCK (означает, что он заблокирован или генерируется исключение JedisConnectionException при достижении maxWait), WHEN_EXHAUSTED_GROW (означает, что создается новый экземпляр jedis, а это означает, что установленный maxActive бесполезен);
maxWait: указывает максимальное время ожидания при заимствовании экземпляра Jedis. Если время ожидания превышено, JedisConnectionException будет создано напрямую;
testOnBorrow: при заимствовании экземпляра jedis, выполнять ли операцию Alidate заранее, если true, полученные экземпляры jedis доступны;
testOnReturn: выполнять ли операцию проверки заранее при возврате в пул;
testWhileIdle: если это правда, это означает, что существует поток удаления простаивающего объекта, сканирующий простаивающий объект. Если проверка не удалась, этот элемент будет иметь смысл только в том случае, если timeBetweenEvictionRunsMillis больше 0;
timeBetweenEvictionRunsMillis: указывает количество миллисекунд, в течение которых ивентору неактивного объекта необходимо спать между двумя сканированиями;
numTestsPerEvictionRun: указывает максимальное количество объектов, сканируемых каждый раз программой проверки неактивных объектов;
minEvictableIdleTimeMillis: указывает минимальное время, в течение которого объект может оставаться в состоянии ожидания, по крайней мере, прежде чем он сможет быть просканирован и удален пользователем бездействующего объекта. Этот элемент имеет смысл только в том случае, если timeBetweenEvictionRunsMillis больше 0;
softMinEvictableIdleTimeMillis: на основе minEvictableIdleTimeMillis в пул добавляются как минимум объекты minIdle. Если -1, выселение не будет выселять какие-либо объекты в зависимости от времени простоя. Если minEvictableIdleTimeMillis>0, этот параметр не имеет смысла и имеет смысл только в том случае, если timeBetweenEvictionRunsMillis больше 0;
ifo: Когда заемщик возвращает объект, используется DEFAULT_LIFO (последний пришел — первый вышел, наиболее часто используемая очередь, аналогичная кешу). Если значение равно False, это означает очередь FIFO;
Настройки JedisPoolConfig по умолчанию для некоторых параметров следующие:
testWhileIdle=истина
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1