Проверяет понимание негативного кеширования как стратегии оптимизации для снижения нагрузки на источники данных при частых запросах отсутствующих значений.
Негативный кеш — это разновидность кеширования, при которой сохраняются не только успешные ответы, но и ответы об отсутствии данных. Обычно кеш хранит результаты успешных операций, но когда запрашивается ключ, которого нет в источнике (например, в базе данных), система может повторять этот запрос каждый раз, тратя ресурсы. Негативный кеш решает эту проблему, запоминая факт отсутствия данных на короткий промежуток времени.
В реальных приложениях часто встречаются сценарии, где клиенты запрашивают несуществующие ресурсы: битые ссылки, устаревшие ID, опечатки в URL. Без негативного кеша каждый такой запрос приводит к обращению к базе данных или внешнему API, что увеличивает задержку и нагрузку. Особенно критично это для высоконагруженных систем, где даже небольшой процент таких запросов может создать значительный трафик.
Принцип прост: когда запрос не находит данных, мы сохраняем в кеш специальную запись с пометкой 'отсутствует' и коротким временем жизни (TTL). При последующих запросах того же ключа кеш возвращает 'не найдено' без обращения к источнику. TTL должен быть небольшим (например, 30–60 секунд), чтобы не блокировать появление новых данных, если они могут добавиться позже.
// Пример на JavaScript с Redis
async function getUser(id) {
const cacheKey = `user:${id}`;
const cached = await redis.get(cacheKey);
if (cached !== null) {
return cached === 'NULL' ? null : JSON.parse(cached);
}
const user = await db.findUser(id);
if (user) {
await redis.set(cacheKey, JSON.stringify(user), 'EX', 300);
} else {
// Негативный кеш: сохраняем маркер отсутствия на 30 секунд
await redis.set(cacheKey, 'NULL', 'EX', 30);
}
return user;
}Негативный кеш широко используется в веб-приложениях, микросервисах, CDN и системах кеширования баз данных. Например, в DNS-серверах негативный кеш хранит ответы о несуществующих доменах, чтобы не переспрашивать вышестоящие серверы. В API-шлюзах он помогает защитить бэкенд от повторных запросов невалидных параметров.
Негативный кеш — это простая и эффективная оптимизация, которая уменьшает нагрузку на источники данных и ускоряет ответы для часто запрашиваемых отсутствующих ключей. Применяйте его в системах с высокой долей запросов к несуществующим данным, но всегда устанавливайте короткий TTL, чтобы избежать устаревания информации.