春@Cacheable标注为不同的服务同样的方法
我已经在Spring启动应用程序实现的标准Redis的缓存模板按照以下article:春@Cacheable标注为不同的服务同样的方法
我那是什么让对象的列表两种不同的服务:
@RequestMapping("/admin/test/list") public String testCache() {
List<Cocktail> cocktails = cocktailsService.list();
List<Ingredient> ingredients = ingredientsService.list();
return "index";
}
注:该方法名称和签名是相同的(即list()
),但它们都具有不同的缓存名称为这样:
// CocktailService @Cacheable(value = “COCKTAILS”)
public List<Cocktail> list() {
return repository.findAll();
}
// IngredientsService
@Cacheable(value = “INGREDIENTS”)
public List<Ingredient> list() {
return repository.findAll();
}
的问题
即使你的缓存名称是不同的方法总是从缓存中返回列表,生成密钥时,有在方法层面没有区别。
可能的解决方案
我知道三种解决方案可能是:
- 更改方法名
- 编写自定义的KeyGenerator
一套高速缓存规划环境地政司利用#root的。目标如:
@Cacheable(value =“COCKTAILS”,key =“{ #root.targetClass}“) @Cacheable(值=”配料”,关键= ”{#root.targetClass}“)
问题
但切切实实的,必须有一个更好的办法或不?
回答:
您所遵循的文章中存在问题。在创建的CacheManager豆,你需要调用cacheManager.setUsePrefix(true);
,才缓存名COCKTAILS和成分将用作Redis的缓存键鉴别。
这里是你应该如何申报缓存管理器bean:与`@ Cacheable`注解,即它们将属于`COCKTAILS指定
@Bean public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// Number of seconds before expiration. Defaults to unlimited (0)
cacheManager.setDefaultExpiration(300);
cacheManager.setUsePrefix(true);
return cacheManager;
}
以上是 春@Cacheable标注为不同的服务同样的方法 的全部内容, 来源链接: utcz.com/qa/265620.html