Практичне Використання Хешів
Ми повністю зіберемо наш застосунок і протестуємо його з використанням Redis та Spring Boot. Кешування суттєво прискорить обробку запитів і зменшить навантаження на базу даних.
Короткий підсумок з відео
У нашій програмі використовується така логіка: коли користувача додають до основної бази даних, його дані ще не кешуються, оскільки це поки що не потрібно.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
Метод createUser просто зберігає користувача у базі даних.
Коли надходить запит на отримання даних користувача за ID, спочатку перевіряється, чи є інформація у кеші Redis. Це дозволяє уникнути зайвих запитів до бази даних, якщо дані вже закешовані.
@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
Thread.sleep(100);
return userRepository.findById(id).orElseThrow(
() -> new RuntimeException(String.format("User with this id: %d not found", id))
);
}
Використовуючи анотацію @Cacheable, дані кешуються під ключем user-cache, який містить значення id (user-cache:20 для користувача з ID 20). Якщо дані знаходяться у кеші, вони отримуються та повертаються. Якщо даних немає у кеші, метод виконує запит до бази даних.
Під час видалення даних з бази даних важливо також видалити їх з кешу, щоб забезпечити узгодженість даних і уникнути використання застарілої інформації.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
Метод deleteUser видаляє користувача з бази даних та очищає його дані з кешу Redis, щоб уникнути використання застарілої інформації у майбутніх запитах.
Переваги кешування
Тепер до найцікавішого — навіщо ми впровадили кешування? Після додавання кешу Redis запити стали значно швидшими — буквально до 20 разів швидше! Це чітко продемонстровано на скріншотах нижче.
До кешування
До впровадження кешування кожен запит надходив безпосередньо до бази даних, що призводило до суттєвих затримок під час обробки.
Після кешування
З впровадженням кешування більшість запитів тепер обробляються Redis, що суттєво зменшує час відповіді.
Підсумок
Кешування за допомогою Redis дало змогу оптимізувати продуктивність застосунку, прискорити обробку запитів і зменшити навантаження на базу даних. Такий підхід особливо корисний для високонавантажених застосунків, де швидкість обробки запитів має вирішальне значення.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.33
Практичне Використання Хешів
Свайпніть щоб показати меню
Ми повністю зіберемо наш застосунок і протестуємо його з використанням Redis та Spring Boot. Кешування суттєво прискорить обробку запитів і зменшить навантаження на базу даних.
Короткий підсумок з відео
У нашій програмі використовується така логіка: коли користувача додають до основної бази даних, його дані ще не кешуються, оскільки це поки що не потрібно.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
Метод createUser просто зберігає користувача у базі даних.
Коли надходить запит на отримання даних користувача за ID, спочатку перевіряється, чи є інформація у кеші Redis. Це дозволяє уникнути зайвих запитів до бази даних, якщо дані вже закешовані.
@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
Thread.sleep(100);
return userRepository.findById(id).orElseThrow(
() -> new RuntimeException(String.format("User with this id: %d not found", id))
);
}
Використовуючи анотацію @Cacheable, дані кешуються під ключем user-cache, який містить значення id (user-cache:20 для користувача з ID 20). Якщо дані знаходяться у кеші, вони отримуються та повертаються. Якщо даних немає у кеші, метод виконує запит до бази даних.
Під час видалення даних з бази даних важливо також видалити їх з кешу, щоб забезпечити узгодженість даних і уникнути використання застарілої інформації.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
Метод deleteUser видаляє користувача з бази даних та очищає його дані з кешу Redis, щоб уникнути використання застарілої інформації у майбутніх запитах.
Переваги кешування
Тепер до найцікавішого — навіщо ми впровадили кешування? Після додавання кешу Redis запити стали значно швидшими — буквально до 20 разів швидше! Це чітко продемонстровано на скріншотах нижче.
До кешування
До впровадження кешування кожен запит надходив безпосередньо до бази даних, що призводило до суттєвих затримок під час обробки.
Після кешування
З впровадженням кешування більшість запитів тепер обробляються Redis, що суттєво зменшує час відповіді.
Підсумок
Кешування за допомогою Redis дало змогу оптимізувати продуктивність застосунку, прискорити обробку запитів і зменшити навантаження на базу даних. Такий підхід особливо корисний для високонавантажених застосунків, де швидкість обробки запитів має вирішальне значення.
Дякуємо за ваш відгук!