Nano Hash - криптовалюты, майнинг, программирование

Jedis, не удается получить соединение с jedis: невозможно получить ресурс из пула

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

Я использую jedis версии 2.8.0, Spring Data redis версии 1.7.5. и сервер Redis версии 2.8.4 для нашего приложения кэширования.

У меня есть несколько кешей, которые сохраняются в Redis, и запрос на получение выполняется из Redis. Я использую API-интерфейсы Spring Data Redis для сохранения и получения данных.

Все сохранения и получения работают нормально, но иногда возникают исключения ниже:

Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool | org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poolorg.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:198)
org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:345)
org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:129)
org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:92)
org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:79)
org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191)
org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:166)
org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:88)
org.springframework.data.redis.core.DefaultHashOperations.get(DefaultHashOperations.java:49)

Мой класс конфигурации Redis:

@Configuration
public class RedisConfiguration {

@Value("${redisCentralCachingURL}")
private String redisHost;

@Value("${redisCentralCachingPort}")
private int redisPort;

@Bean
public StringRedisSerializer stringRedisSerializer() {
  StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
  return stringRedisSerializer;
}

@Bean
JedisConnectionFactory jedisConnectionFactory() {
  JedisConnectionFactory factory = new JedisConnectionFactory();
  factory.setHostName(redisHost);
  factory.setPort(redisPort);
  factory.setUsePool(true);
  return factory;
}

@Bean
public RedisTemplate<String, Object> redisTemplate() {
  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setConnectionFactory(jedisConnectionFactory());
  redisTemplate.setExposeConnection(true);
  // No serializer required all serialization done during impl
  redisTemplate.setKeySerializer(stringRedisSerializer());
  //`redisTemplate.setHashKeySerializer(stringRedisSerializer());
  redisTemplate.setHashValueSerializer(new GenericSnappyRedisSerializer());
  redisTemplate.afterPropertiesSet();
  return redisTemplate;
}

@Bean
public RedisCacheManager cacheManager() {
  RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
  redisCacheManager.setTransactionAware(true);
  redisCacheManager.setLoadRemoteCachesOnStartup(true);
  redisCacheManager.setUsePrefix(true);
  return redisCacheManager;
 }

 }

Кто-нибудь сталкивался с этой проблемой или имеет какие-либо идеи по этому поводу, почему это может произойти?


  • Пожалуйста, опубликуйте полную трассировку стека. 19.04.2017
  • @ mp911de: Предоставлю, как только у меня будут данные. Мы перезапустили наш сервер, поэтому у нас нет журналов, и, поскольку эта проблема возникает время от времени, думаю, мне придется подождать. 20.04.2017
  • Это не полная трассировка стека. Причина сбоя подключения обычно находится в самом конце (причина JedisConnectionException ). 26.04.2017
  • Я не могу распечатать трассировку стека в своем приложении. Поэтому я попытался захватить его из Throwable.getStackTrace() и зарегистрировал его. Что дает мне трассировку стека выше. В stacktrace есть еще кое-что, но это методы моего приложения, которые я не включил. Это все, что у меня есть. 28.04.2017

Ответы:


1

Мы столкнулись с той же проблемой с RxJava, приложение работало нормально, но через некоторое время из пула больше нельзя было получать соединения. После нескольких дней отладки мы наконец выяснили, что вызвало проблему:

redisTemplate.setEnableTransactionSupport(true)

каким-то образом spring-data-redis не освобождает соединения. Нам нужна была поддержка транзакций для MULTI/EXEC, но в итоге изменили реализацию, чтобы избавиться от этой проблемы.

Тем не менее мы не знаем, является ли это ошибкой или неправильным использованием с нашей стороны.

12.08.2017
  • У меня была такая же проблема, но в моем случае я использую RxJava. Классы поддержки транзакций spring-data-redis, похоже, используют переменные ThreadLocal, которые не будут работать в моем случае. Используете ли вы какие-либо асинхронные фреймворки? 18.08.2017
  • @Thomas, в нашем случае это также была RxJava, я обновил свой ответ. 22.08.2017
  • @Thomas Только что увидел ваш ответ, я некоторое время публиковал эти вопросы. Я решил эту проблему, играя с конфигурациями, добавленными ниже, что решило мою проблему: poolConfig.setMaxIdle(30); poolConfig.setMinIdle (10); 24.08.2017

  • 2

    Я перешел с redis.template на обычных jedis. Добавлена ​​​​ниже конфигурация (также может быть добавлена ​​​​в шаблон Redis) для пула, и теперь не видно никаких исключений:

    jedisPoolConfig.setMaxIdle(30);
    jedisPoolConfig.setMinIdle(10);
    

    для шаблона Redis:

    jedisConnectionFactory.getPoolConfig().setMaxIdle(30);
    jedisConnectionFactory.getPoolConfig().setMinIdle(10);
    

    Та же конфигурация выше может быть добавлена ​​и в шаблон Redis.

    24.08.2017
  • Ну, кажется, это сработало и для меня, но я не уверен, почему. Не могли бы вы уточнить? В основном моя проблема заключается в том, что если у моего приложения закончатся незанятые соединения. (current_connections › max_idle) 27.07.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..