Spring EhCache обновляет список кэша

#java #spring #caching #annotations #ehcache

#java #весна #кэширование #примечания #ehcache

Вопрос:

Я новичок в EhCache, поэтому, возможно, мой вопрос глупый, но в любом случае: я использую EhCache с Spring. И есть это в моем DAO:

 @Cacheable(value="product", key="#id")
public Product getProductById(Integer id) {//some code;}

@Cacheable(value="productList")
public List<Product> getAllProducts() {//some code;}
 

Я хочу обновить свой кэш списка продуктов при удалении или обновлении какого-либо продукта. Могу ли я сделать что-то подобное в своем коде, чтобы решить эту проблему (в этом примере список продуктов и кэш продукта удалены):

 @Caching(evict={@CacheEvict(value="productList", allEntries=true), @CacheEvict(value="product", key="#id")})
public boolean deleteProductById(Integer id) { //some code;}
 

Может быть, есть какой-то способ сделать это без аннотаций. Будем рады любому совету. Спасибо.

Комментарии:

1. Это выглядит правильно. Вы пробовали это?

2. Да, я пробовал. Этот код просто удаляет кэш моего продукта и списка продуктов. Но я не хочу удалять кэш списка продуктов. Я хочу найти объект по некоторому ключу в кэше списка продуктов и удалить только его, без удаления кэша списка продуктов. Могу ли я это сделать?

3. Вы проверили @CachePut ?

4. Да, но я не могу понять, как я могу это использовать. Я должен написать что-то вроде этого: @Caching(выселить ={ @CacheEvict(значение = «product», ключ = «#id»)}, поставить = { @CachePut(значение = «ProductList», ключ = «#id»)}) над моим методом удаления? Может быть, у вас есть какой-нибудь пример? Спасибо за ваш ответ.

5. Попробуйте просто использовать @Caching{put={@CachePut(value="productList", key="#id"), @CachePut(value="product", key="#id")} и дайте мне знать

Ответ №1:

это работает со мной таким образом

 @CacheEvict(value="productList", allEntries=true)
public boolean deleteProductById(Integer id) {
    //some code;
}