Lorsque j'utilise @Cacheable
et que j'appelle une méthode différente avec le même paramètre, cela génère une même clé. SimpleKeyGenerator
clé générée sans les noms de cache. J'utilise le spring-boot 1.3.2 avec le ressort 4.2.4.Des collisions peuvent survenir lors de l'utilisation de Spring @Cacheable et SimpleKeyGenerator
Voici un exemple:
@Component
public static class CacheableTestClass {
@Cacheable(cacheNames = "test-cacheproxy-echo1")
public String echo1(String text) {
return text;
}
@Cacheable(cacheNames = "test-cacheproxy-echo2")
public String echo2(String text) {
return "Another " + text;
}
}
et exécutez un test:
assertEquals("OK", cacheableTestClass.echo1("OK"));
assertEquals("Another OK", cacheableTestClass.echo2("OK")); // Failure: expected 'Another OK', actual 'OK'.
Alors, est-il un moyen de résoudre ce problème? Merci beaucoup.
Mise à jour
Voici ma configuration CacheManager
.
@Bean
@ConditionalOnMissingBean(name = "cacheRedisTemplate")
public RedisTemplate<Object, Object> cacheRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(template.getKeySerializer());
return template;
}
@Bean
public RedisCacheManager cacheManager(@Qualifier("cacheRedisTemplate") RedisTemplate<Object, Object> cacheRedisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(cacheRedisTemplate);
cacheManager.setDefaultExpiration(
redisCacheProperties().getDefaultExpiration());
cacheManager.setExpires(redisCacheProperties().getExpires());
return cacheManager;
}
Affichez votre configuration pour le CacheManager. À partir de vos extraits de code, les clés ne doivent pas entrer en collision car vous utilisez des noms de cache différents. –
@ekemchitsiga Mettre à jour ma configuration pour 'CacheManager'. – FalconIA