Анотації для Роботи з Кешем
Свайпніть щоб показати меню
Замість ручного керування кешуванням можна використовувати анотації, які автоматично керують цим процесом. Розглянемо доступні анотації.
Кешування результатів
Анотація @Cacheable застосовується до методів, результати яких потрібно кешувати. При повторному виклику методу з тими ж параметрами результат буде отримано з кешу.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
У цьому прикладі метод getUserById кешує результат запиту користувача за його ID у кеші з назвою "usersCache". Якщо метод викликається знову з тим самим userId, дані отримуються з кешу замість виконання запиту до бази даних.
Оновлення кешу
Анотація @CachePut оновлює кеш кожного разу при виконанні методу, незалежно від того, чи був результат закешований раніше.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
Анотація @CachePut використовується для оновлення кешу щоразу, коли викликається метод updateUser. Це корисно, коли дані змінюються і потрібно синхронізувати кеш із змінами у базі даних. Кеш оновлюється з ключем, що відповідає ID користувача.
Очищення кешу
Анотація @CacheEvict використовується для видалення даних з кешу, наприклад, коли користувача видаляють з бази даних.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
У цьому прикладі метод deleteUser видаляє запис з кешу з ключем, що дорівнює userId.
Комбіновані операції з кешем
Анотація @Caching дозволяє виконувати декілька операцій кешування в межах одного методу, поєднуючи @CachePut та @CacheEvict.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
У цьому прикладі метод updateUser одночасно оновлює кеш із новим станом користувача за допомогою @CachePut та видаляє старий запис із кешу за допомогою @CacheEvict. Це корисно, коли потрібно виконати кілька операцій з кешем одночасно.
1. Коли слід використовувати @CacheEvict?
2. Яке призначення анотації @CachePut?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат