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

我已经在几个线程中看到了答案,但对我却没有解决,而且由于我的问题偶尔发生,因此问这个问题是否有人有任何想法。

我正在使用jedis版本2.8.0,Spring Data Redis版本1.7.5。和redis服务器版本2.8.4用于我们的缓存应用程序。

我有多个缓存保存在redis中,并且从redis获得请求。我正在使用spring数据redis API保存和获取数据。

所有保存和获取都可以正常工作,但偶尔会遇到以下异常:

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;

}

}

有没有人遇到这个问题或对此有任何想法,为什么会发生?

回答:

我从redis.template迁移到了Jedis。为池添加了以下配置(也可以在redis模板中添加),现在看不到任何异常:

jedisPoolConfig.setMaxIdle(30);

jedisPoolConfig.setMinIdle(10);

对于redis模板:

jedisConnectionFactory.getPoolConfig().setMaxIdle(30);

jedisConnectionFactory.getPoolConfig().setMinIdle(10);

上面相同的配置也可以在redis模板中添加。

以上是 Jedis,无法获取jedis连接:无法从池获取资源 的全部内容, 来源链接: utcz.com/qa/430591.html

回到顶部