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

tzxcd3kk  于 2022-12-17  发布在  Spring
关注(0)|答案(4)|浏览(255)

我已经看到了几个线程的答案,但没有为我工作,因为我的问题偶尔发生,问这个问题,如果任何人有任何想法。
我正在使用jedis 2.8.0版、Spring Data redis 1.7.5版和redis服务器2.8.4版作为缓存应用程序。
我有多个缓存保存在Redis中,获取请求是从Redis完成的。我使用Spring Data Redis API来保存和获取数据。
所有的保存和get都运行良好,但偶尔会出现以下异常:

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;
 }

 }

有没有人面对过这个问题或对此有任何想法,为什么会发生这种情况?

sbtkgmzw

sbtkgmzw1#

我们在RxJava上也遇到了同样的问题,应用程序运行正常,但一段时间后,无法从池中获取连接。经过几天的调试,我们终于找到了问题的原因:

redisTemplate.setEnableTransactionSupport(true)

不知何故导致spring-data-redis不释放连接。我们需要对MULTI / EXEC的事务支持,但最后改变了实现以消除这个问题。
我们仍然不知道这是一个错误或错误的用法对我们来说。

u59ebvdq

u59ebvdq2#

我从redis.template移到了plain jedis。添加了下面的配置(也可以添加到redis模板中),现在没有看到任何异常:

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

对于redis模板:

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

同样的配置也可以添加到redis模板中。

ecbunoof

ecbunoof3#

问题出在Redis的配置上
对我来说,我在本地使用这个属性,当我评论这个属性时,这个问题得到了解决

Spring红色数据库=12

正确的属性为
Spring。 Redis 。哨兵。主人=我的主人
密码:密码=
spring.redis.哨兵.节点=本地主机:5000

w3nuxt5m

w3nuxt5m4#

我通过在我的应用程序.yml文件中更改这个来修复我的:

redis:
   password: ${REDIS_SECRET_KEY: null}

改为:

password: ${REDIS_SECRET_KEY:}

相关问题