Ответ
Кэширование запросов — это техника оптимизации, при которой результаты дорогостоящих или частых запросов (к базе данных, внешним API, результатам вычислений) сохраняются во временном быстром хранилище (кэше) для повторного использования.
Принцип работы:
- При первом запросе система выполняет его обычным путём (например, обращается к БД).
- Полученный результат сохраняется в кэше с ключом, часто основанным на параметрах запроса.
- При последующих идентичных запросах результат возвращается из кэша, минуя основную медленную систему.
Преимущества:
- Ускорение отклика: Доступ к данным из памяти (например, Redis) в сотни раз быстрее, чем с диска или по сети.
- Снижение нагрузки: Уменьшение числа обращений к базе данных или внешним сервисам.
- Повышение отказоустойчивости: Кэш может служить буфером при временной недоступности основного источника данных.
Пример реализации в Spring (Java):
@Service
public class ProductService {
@Cacheable(value = "products", key = "#id") // Аннотация для кэширования
public Product getProductById(Long id) {
// Этот метод выполнится только если результат
// для данного 'id' отсутствует в кэше "products"
return productRepository.findById(id) // Долгий запрос к БД
.orElseThrow(() -> new EntityNotFoundException("Product not found"));
}
@CacheEvict(value = "products", key = "#id") // Аннотация для очистки кэша
public void updateProduct(Product product) {
productRepository.save(product);
// После обновления старые данные удаляются из кэша
}
}
Типичные сценарии использования:
- Статичные или редко изменяющиеся справочники (список городов, категорий).
- Результаты сложных агрегирующих запросов или отчётов.
- Ответы от внешних API с лимитами на запросы.
Популярные решения: Redis, Memcached, Caffeine (in-memory cache для Java), Ehcache.