【发布时间】:2016-05-11 10:04:03
【问题描述】:
当我使用@Cacheable 并使用相同的参数调用不同的方法时,它会生成相同的密钥。
SimpleKeyGenerator 生成的密钥没有缓存名称。
我使用 spring-boot 1.3.2 和 spring 4.2.4。
这是一个示例:
@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;
}
}
并运行测试:
assertEquals("OK", cacheableTestClass.echo1("OK"));
assertEquals("Another OK", cacheableTestClass.echo2("OK")); // Failure: expected 'Another OK', actual 'OK'.
那么,有没有办法解决这个问题? 非常感谢。
更新
这是我的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;
}
【问题讨论】:
-
发布 CacheManager 的配置。从您的代码 sn-ps 中,键不应该因为您使用不同的缓存名称而发生冲突
-
@ekemchitsiga 更新我的
CacheManager配置。
标签: spring spring-boot spring-4 spring-cache spring-data-redis