So aktualisieren / entfernen Sie ein Element, das bereits in einer Elementsammlung zwischengespeichert ist

Ich arbeite mit Spring und EhCache

Ich habe die folgende Methode

@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
    return new LinkedHashSet<>(this.productRepository.findAll());
}

Ich habe andere Methoden, die mit @Cacheable und @CachePut und @CacheEvict arbeiten.

Stellen Sie sich vor, die Datenbank gibt 100 Produkte zurück und diese werden zwischengespeichertkey="#root.target.PRODUCTS", dann würde andere MethodeEinfügen - Aktualisieren - Löschen ein Element in die Datenbank. Daher werden die Produkte durch die zwischengespeichertenkey="#root.target.PRODUCTS" sind nicht mehr die gleichen wie die Datenbank.

Ich meine, überprüfen Sie die beiden folgenden zwei Methoden, sie sind in der Lage, ein Element zu aktualisieren / löschen, und dasgleicher Artikel ist in der anderen zwischengespeichertkey="#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);
}

Ich möchte wissen, ob es möglich ist, das im Cache befindliche Objekt über das zu aktualisieren / löschenkey="#root.target.PRODUCTS"Wenn das Produkt aktualisiert wird, sind es 100 oder 499, wenn das Produkt gelöscht wird.

Mein Punkt ist, ich möchte Folgendes vermeiden:

@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);
}

Ich möchte nicht, dass die 500 oder 499 Produkte erneut im Cache zwischengespeichert werdenkey="#root.target.PRODUCTS"

Ist das möglich? Wie?

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage