Анотації для Роботи з Кешем
Замість ручного керування кешуванням можна використовувати анотації, які автоматично керують цим процесом. Розглянемо доступні анотації.
Кешування результатів
Анотація @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?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.33
Анотації для Роботи з Кешем
Свайпніть щоб показати меню
Замість ручного керування кешуванням можна використовувати анотації, які автоматично керують цим процесом. Розглянемо доступні анотації.
Кешування результатів
Анотація @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?
Дякуємо за ваш відгук!