我正在使用 Spring 和 EhCache
我有以下方法
@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
return new LinkedHashSet<>(this.productRepository.findAll());
}
我还有其他使用@Cacheable、@CachePut 和@CacheEvict 的方法。
现在,假设数据库返回 100 个产品并通过 缓存它们key="#root.target.PRODUCTS"
,然后其他方法将插入 - 更新 - 删除一个项目到数据库中。因此,通过 缓存的产品key="#root.target.PRODUCTS"
不再相同,例如数据库。
我的意思是,检查以下两种方法,它们能够更新/删除一个项目,并且同一个项目缓存在另一个中key="#root.target.PRODUCTS"
@Override
@CachePut(value="products", key="#product.id")
public Product update(Product product) {
return this.productRepository.save(product);
}
@Override
@CacheEvict(value="products", key="#id")
public void delete(Integer id) {
this.productRepository.delete(id);
}
我想知道是否可以通过 更新/删除位于缓存中的项目key="#root.target.PRODUCTS"
,如果产品被删除,它将是 100 更新产品或 499。
我的观点是,我想避免以下情况:
@Override
@CachePut(value="products", key="#product.id")
@CacheEvict(value="products", key="#root.target.PRODUCTS")
public Product update(Product product) {
return this.productRepository.save(product);
}
@Override
@Caching(evict={
@CacheEvict(value="products", key="#id"),
@CacheEvict(value="products", key="#root.target.PRODUCTS")
})
public void delete(Integer id) {
this.productRepository.delete(id);
}
我不想再次调用 500 或 499 产品缓存到key="#root.target.PRODUCTS"
有可能这样做吗?如何?
提前致谢。