data-infra
Словарь ↗Кэш (Cache)
Кэш — это слой хранения, обычно в оперативной памяти, который хранит временную копию данных или вычисленного результата, чтобы будущий запрос на то же самое обслуживался почти мгновенно вместо повторения дорогого запроса к базе данных, вызова API или вычисления. Кэширование — одна из старейших и наиболее универсально применимых техник повышения производительности в разработке ПО, и она приобретает особую важность именно в AI-продуктах, потому что вызовы API LLM одновременно медленные (от сотен миллисекунд до нескольких секунд) и тарифицируются по токенам (каждый избежанный вызов — это прямая экономия денег, а не только выигрыш в задержке). Почему это важно для разработчиков AI/SaaS: наивная AI-функция вызывает API модели при каждом запросе, даже когда многие запросы почти идентичны (один и тот же вопрос из FAQ, заданный разными пользователями, одно и то же описание товара, генерируемое повторно, один и тот же эмбеддинг, вычисляемый дважды для неизменившегося текста). Кэширование этих ответов может на порядок сократить и задержку, и расходы на API для функций с любым паттерном повторяющихся запросов, и это часто самая рентабельная работа на полдня инженерного времени, доступная в статье расходов AI-продукта. Как это работает: самый распространённый паттерн — cache-aside («ленивая загрузка») — при запросе сначала проверяется кэш; при попадании результат возвращается немедленно; при промахе выполняется дорогая работа, результат сохраняется в кэш со временем жизни (TTL), затем возвращается. Инвалидация кэша — понимание того, когда закэшированное значение устарело и должно быть обновлено, — по-настоящему сложная часть (знаменито считается одной из «двух сложных вещей в информатике»), обычно решаемая либо через TTL (принять некоторую устарелость ради простоты), либо через явную инвалидацию (сбрасывать ключ кэша при изменении исходных данных, например срабатывает вебхук и удаляет `cache:product:123` при обновлении товара). Кэшам также нужна политика вытеснения на случай заполнения — LRU (Least Recently Used, «дольше всего не использовавшийся») самая распространённая, отбрасывающая то, к чему дольше всего не обращались, чтобы освободить место для новых записей. Redis и Memcached — доминирующие отдельные хранилища кэша; CDN (Cloudflare, Fastly) кэшируют на уровне HTTP для статического и полустатического контента. Практический пример: AI SEO-инструмент генерирует мета-описания для URL по запросу. Поскольку один и тот же популярный URL (например, известный пост в блоге конкурента) анализируется многими разными пользователями, бэкенд кэширует сгенерированный LLM вывод, используя ключ на основе хэша URL + версии промпта: `SETEX cache:meta:{url_hash}:{prompt_v3} 86400 "<сгенерированное описание>"`. Первый пользователь, анализирующий данный URL, вызывает реальный запрос к LLM (~1.5 с, $0.002); следующая тысяча пользователей, запрашивающих тот же URL в тот же день, получают закэшированный ответ менее чем за 5 мс без предельных затрат — а повышение `prompt_v3` до `prompt_v4` в ключе кэша автоматически инвалидирует старые закэшированные результаты после изменения промпта, без необходимости ручной очистки кэша.
Похожие термины