Java for Beginner
676 subscribers
560 photos
156 videos
12 files
858 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
@CacheEvict

Аннотация @CacheEvict используется для удаления записей из кеша. Это необходимо, когда данные в кеше устарели, например, после обновления или удаления записи.

Параметры

value / cacheNames (обязательный параметр)
Указывает имя кеша, из которого нужно удалить записи.
@CacheEvict("usersCache")


key (опциональный)
Указывает ключ, который нужно удалить. Если не указано, удаляется запись, соответствующая ключу, сформированному из аргументов метода.
@CacheEvict(value = "usersCache", key = "#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}


allEntries (опциональный)
Если true, очищает весь кеш. Используется для полного удаления всех записей в кеше.
@CacheEvict(value = "usersCache", allEntries = true)
public void clearCache() {
System.out.println("Cache cleared!");
}


beforeInvocation (опциональный)
Если true, удаление из кеша происходит до выполнения метода. По умолчанию удаление происходит после успешного выполнения метода.
@CacheEvict(value = "usersCache", key = "#id", beforeInvocation = true)
public void deleteUser(Long id) {
throw new RuntimeException("Error occurred!");
}


Примеры использования

1. Удаление записи из кеша по ключу
@CacheEvict(value = "usersCache", key = "#id")
public void updateUser(Long id, User user) {
userRepository.save(user);
}
Обновляем пользователя и удаляем устаревшие данные из кеша.


2. Очистка всего кеша

@CacheEvict(value = "usersCache", allEntries = true)
public void clearAllUsersCache() {
System.out.println("All users cache cleared!");
}
Этот метод полностью очищает кеш usersCache.


3. Очистка перед выполнением метода

@CacheEvict(value = "usersCache", key = "#id", beforeInvocation = true)
public void deleteUser(Long id) {
// Логика удаления пользователя
userRepository.deleteById(id);
}
Кеш удаляется перед удалением пользователя из базы.


Совместное использование @Cacheable и @CacheEvict

Эти аннотации можно использовать вместе для полного управления кешем.

@Service
public class ProductService {

@Cacheable("productCache")
public Product getProduct(Long id) {
System.out.println("Fetching product from database...");
return productRepository.findById(id).orElse(null);
}

@CacheEvict(value = "productCache", key = "#id")
public void updateProduct(Long id, Product product) {
System.out.println("Updating product in database...");
productRepository.save(product);
}

@CacheEvict(value = "productCache", allEntries = true)
public void clearAllProductsCache() {
System.out.println("Clearing all product cache...");
}
}


Метод getProduct кеширует продукт.
Метод updateProduct удаляет устаревшие данные из кеша для обновлённого продукта.
Метод clearAllProductsCache очищает весь кеш продуктов.


Советы по использованию

Выбирайте правильный ключ: Убедитесь, что ключ уникален и логичен.
Учитывайте размер кеша: Не храните в кеше слишком большие данные.
Обновляйте кеш своевременно: Используйте
@CacheEvict для предотвращения устаревания данных.
Избегайте чрезмерного кеширования: Не кешируйте часто изменяющиеся данные.


#Java #Training #Spring #Cacheable #CacheEvict