Cómo actualizar / eliminar un elemento ya almacenado en caché dentro de una colección de elementos
Estoy trabajando con Spring y EhCache
Tengo el siguiente metodo
@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
return new LinkedHashSet<>(this.productRepository.findAll());
}
Tengo otros métodos trabajando con @Cacheable y @CachePut y @CacheEvict.
Ahora, imagine que la base de datos devuelve 100 productos y se almacenan en cachékey="#root.target.PRODUCTS"
, entonces otro métodoinsertar - actualizar - eliminado un elemento en la base de datos. Por lo tanto, los productos almacenados en cachékey="#root.target.PRODUCTS"
ya no son lo mismo, como la base de datos.
Es decir, verifique los dos métodos siguientes, pueden actualizar / eliminar un elemento, y esomismo artículo se almacena en caché en el otrokey="#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);
}
Quiero saber si es posible actualizar / eliminar el elemento ubicado en el caché a través delkey="#root.target.PRODUCTS"
, sería 100 con el Producto actualizado o 499 si se eliminara el Producto.
Mi punto es que quiero evitar lo siguiente:
@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);
}
No quiero volver a llamar a los 500 o 499 productos que se almacenarán en cachékey="#root.target.PRODUCTS"
¿Es posible hacer esto? ¿Cómo?
Gracias por adelantado.