#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;
}