我已经在几个线程中看到了答案,但对我却没有解决,而且由于我的问题偶尔发生,因此问这个问题是否有人有任何想法。
我正在使用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模板中添加。