spring – Jedis,无法获得jedis连接:无法从池中获取资源

前端之家收集整理的这篇文章主要介绍了spring – Jedis,无法获得jedis连接:无法从池中获取资源前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经看到几个线程中的答案,但没有为我工作,因为偶尔会出现问题,如果有任何人有任何想法,请问这个问题.

我使用的是jedis版本2.8.0,Spring Data redis版本1.7.5.和我们的缓存应用程序的redis服务器版本2.8.4.

我有多个缓存,用redis保存,get请求是从redis完成的.我使用spring数据redis API来保存和获取数据.

所有保存和获取工作正常,但偶尔低于例外:

  1. 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
  2. org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:198)
  3. org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:345)
  4. org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:129)
  5. org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:92)
  6. org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:79)
  7. org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191)
  8. org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:166)
  9. org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:88)
  10. org.springframework.data.redis.core.DefaultHashOperations.get(DefaultHashOperations.java:49)
  11. @H_404_14@
  12. 我的redis配置类:

  13. @Configuration
  14. public class RedisConfiguration {
  15. @Value("${redisCentralCachingURL}")
  16. private String redisHost;
  17. @Value("${redisCentralCachingPort}")
  18. private int redisPort;
  19. @Bean
  20. public StringRedisSerializer stringRedisSerializer() {
  21.   StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
  22.   return stringRedisSerializer;
  23. }
  24. @Bean
  25. JedisConnectionFactory jedisConnectionFactory() {
  26.   JedisConnectionFactory factory = new JedisConnectionFactory();
  27.   factory.setHostName(redisHost);
  28.   factory.setPort(redisPort);
  29.   factory.setUsePool(true);
  30.   return factory;
  31. }
  32. @Bean
  33. public RedisTemplaterequired all serialization done during impl
  34.   redisTemplate.setKeySerializer(stringRedisSerializer());
  35.   //`redisTemplate.setHashKeySerializer(stringRedisSerializer());
  36.   redisTemplate.setHashValueSerializer(new GenericSnappyRedisSerializer());
  37.   redisTemplate.afterPropertiesSet();
  38.   return redisTemplate;
  39. }
  40. @Bean
  41. public RedisCacheManager cacheManager() {
  42.   RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
  43.   redisCacheManager.setTransactionAware(true);
  44.   redisCacheManager.setLoadRemoteCachesOnStartup(true);
  45.   redisCacheManager.setUsePrefix(true);
  46.   return redisCacheManager;
  47.  }
  48.  }
  49. @H_404_14@
  50. 有没有人遇到过这个问题或对此有任何想法,为什么会发生这种情况?

最佳答案
我们遇到了与RxJava相同的问题,应用程序运行良好,但过了一段时间后,再也无法从池中获取任何连接.经过几天的调试,我们终于找出了导致问题的原因:

  1. redisTemplate.setEnableTransactionSupport(true)
  2. @H_404_14@
  3. 不知何故导致spring-data-redis不释放连接.我们需要对MULTI / EXEC的事务支持,但最终改变了实现以摆脱这个问题.

  4. 我们仍然不知道这是一个错误错误的使用方式.

猜你在找的Spring相关文章