我使用内置的springboot1redis库和@cacheable注解在redis中缓存一些值。redis集群托管在aws中,未使用ssl和密码进行集群。
我使用注解的一个例子是:
@Cacheable(value = "example", key = "'example-'.concat(#id.toString())")
public List<DTO> getById(Long id) {
List<DBObject> dbObjectList = dbClient.getById(id);
return dbObjectList.stream()
.map(dbObject -> transformer.transformToDTO(dbObject))
.collect(Collectors.toList());
}
我使用莴苣连接到集群,因为SpringBoot1Jedis和通过ssl连接存在问题。我的redis配置是:
@Bean
public RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
lettuceConnectionFactory.setHostName(host);
lettuceConnectionFactory.setPort(port);
lettuceConnectionFactory.setPassword(password);
lettuceConnectionFactory.setUseSsl(ssl);
return lettuceConnectionFactory;
}
@Bean
public static <T> RedisTemplate<String, T> redisTemplate(RedisConnectionFactory redisConnectionFactory,
ObjectMapper objectMapper) {
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
RedisTemplate<String, T> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(genericJackson2JsonRedisSerializer);
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(genericJackson2JsonRedisSerializer);
return template;
}
其中主机、端口、密码和ssl都是通过application.yml/environment properties配置的。
我的redis缓存通过以下方式配置:
@Bean
public <T> RedisCacheManager redisCacheManager(RedisTemplate<String, T> redisTemplate) {
final List<String> cacheNamesList = Arrays.asList(cacheName);
final RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate, cacheNamesList);
final Map<String, Long> expiresMap = new HashMap<>();
expiresMap.put(cacheName, cacheTTL);
redisCacheManager.setExpires(expiresMap);
return redisCacheManager;
}
所有这些都按预期工作,并且使用正确的ttl正确缓存了值。我遇到的问题是,aws redis metrics显示了创建的大量新连接(根据cloudwatch metrics,一分钟内会有2000多个新连接)。
我假设莴苣在线程之间共享连接,但事实似乎并非如此。我的配置是否设置不正确?我想我可以通过升级到springboot2来解决这个问题,但这不是一个简单的升级,因为它是一个相当大的应用程序,我希望我可以在springboot1中解决这个问题。
这些新的联系不是问题吗?我知道redis确实有连接限制,但看起来我的应用程序并没有接近这个限制。
aws指标
暂无答案!
目前还没有任何答案,快来回答吧!