让我们假设我有一个方法可以为所有实体更新一个字段。
public void makeAllCarsRed(){...}
我知道Spring提供3个注释来管理缓存:
@Cacheable
- 尝试在缓存中查找值。如果找不到 - 执行方法并添加到缓存; @CachEvict
- 只需按条件从缓存中删除对象; @CachPut
- 将新值设置为缓存我没有看到为我的情况应用这些注释的方法。
我认为让所有cach无效是太昂贵了
答案 0 :(得分:0)
Spring缓存整个实体,而不是单个字段。因此,您无法从缓存中逐出字段。
如果您想要从缓存中逐出实体,您也会遇到问题,但这可以解决:
在您的方法之外,它不可见,哪些entites更新,因此您不能使用任何这些注释。
你可以做的是将CacheManager注入拥有方法makeAllCarsRed()的类中,然后手动更新所有更新的entite:
在您的配置中
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("cacheName");
}
具有makeAllCarsRed()的类:
public class MakeAllCarsRedService{
@Autowired CacheManager cm;
...
public void makeAllCarsRed(){
Cache cache = cm.getCache("cacheName");
//remove from cache
cache.evict(key)
//or, if neddec add to cache
put(key, entity);
...
}
}