私は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"
は、データベースなどとは異なります。
つまり、次の2つの方法を確認してください。それらはアイテムを更新/削除でき、同じアイテムが他のアイテムにキャッシュされます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"
これを行うことは可能ですか?どのように?
前もって感謝します。