> Что такое негативный кэш и почему он вреден (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: VK

Стек: Go

> Пример ответа

Негативный кэш (negative caching) - это механизм, при котором кэшируется факт отсутствия данных, а не сами данные. Например, если DNS-запрос вернул NXDOMAIN (домен не найден), этот ответ может быть сохранён в кэше на некоторое время, чтобы не повторять запрос к вышестоящему серверу.

В Go негативный кэш часто реализуется через map или in-memory хранилище (например, sync.Map), где ключ - это идентификатор запроса, а значение - признак отсутствия данных. Проблема в том, что такой кэш может быстро заполниться невалидными записями, особенно при большом количестве несуществующих ключей (например, при атаке перебором или при работе с динамическими данными).

Почему это вредно:

  1. Утечка памяти - негативные записи занимают место, но не приносят пользы, так как их нельзя использовать для ответа. В Go это может привести к росту кучи и увеличению нагрузки на GC.

  2. Снижение производительности - при каждом запросе несуществующего ключа сначала проверяется кэш (что бесполезно), а затем выполняется дорогой запрос к источнику. В итоге кэш только добавляет накладные расходы.

  3. Блокировка корректных данных - если негативный кэш имеет длительный TTL, то после появления реальных данных (например, создание нового пользователя) кэш будет возвращать «нет данных» до истечения TTL, что приведёт к ошибкам в бизнес-логике.

  4. Сложность инвалидации - в Go, если вы используете TTL-основанный кэш (например, с time.After), негативные записи требуют отдельного управления, что усложняет код и повышает риск багов.

Рекомендация: избегайте негативного кэширования в Go, если только вы не работаете с системами, где запросы к источнику крайне дороги (например, внешние API). Вместо этого используйте кэширование только для успешных ответов, а для отсутствующих данных применяйте отдельные структуры с ограниченным размером (например, LRU-кэш) и коротким TTL.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью