Зачем кэш и где он живёт

Кэш — это держать ответ поближе и побыстрее, чтобы не считать одно и то же дважды.

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

Почему кэш так помогает

Чтение из памяти (~100 нс) в тысячи раз быстрее, чем запрос к базе через сеть и диск (~миллисекунды). Если 90% запросов читают одни и те же популярные данные, кэш отдаёт их мгновенно и снимает основную нагрузку с базы. Это работает благодаря принципу локальности: небольшая доля данных собирает львиную долю обращений (правило 80/20).

ИсточникПорядок задержки
Память (кэш в RAM)~100 нс
Redis по сети в ЦОД~0,5 мс
Запрос к SQL с диском~5–50 мс
Внешний сервис/континент~100+ мс

Уровни кэширования

Кэш есть почти на каждом этапе пути запроса. Чем ближе к пользователю — тем быстрее, но тем труднее обновлять.

УровеньЧто кэшируетПлюс / минус
Браузер клиентастатику, ответы APIмгновенно, но трудно сбросить у всех
CDNкартинки, JS/CSS, видеоблизко к пользователю географически
Сервер (Redis/Memcached)результаты запросов, сессииобщий для всех инстансов
Уровень БДплан запроса, буфер страницпрозрачно, но ограниченно

Метрика: hit rate

Главный показатель кэша — доля попаданий (hit rate): сколько запросов обслужено из кэша, не доходя до источника. Hit rate 90% означает, что база получает лишь 10% трафика. Если hit rate низкий — кэш почти бесполезен и только добавляет сложности.

hit rate = попадания / (попадания + промахи)

Запрос → есть в кэше?
  да  → hit:  вернуть из кэша (быстро)
  нет → miss: сходить в базу, положить в кэш, вернуть

Что кэшировать, а что нет

Кэш идеален для данных, которые часто читают и редко меняют: карточки товаров, профили, конфиги, результаты тяжёлых вычислений. Плохо подходит для данных, которые меняются ежесекундно и обязаны быть точными (баланс счёта), — там кэш только добавит риск устаревания.

Итог

  • Кэш держит горячие данные в быстрой памяти и снимает основную нагрузку с базы.
  • Кэшируют на всех уровнях: браузер, CDN, сервер (Redis), сама БД.
  • Эффективность меряют hit rate; кэшируют то, что часто читают и редко меняют.
Проверьте себя
1. Какой главный эффект серверного кэша вроде Redis?
AОн увеличивает объём базы данных
BОтдаёт горячие данные из памяти быстро и снимает нагрузку с базы
CОн заменяет балансировщик
DОн делает данные согласованными
2. Что показывает hit rate кэша?
AСколько памяти занимает кэш
BДолю запросов, обслуженных из кэша без обращения к источнику
CСкорость сети
DЧисло серверов
3. Какие данные хуже всего подходят для кэширования?
AКарточки товаров, которые меняются раз в неделю
BБаланс счёта, который меняется ежесекундно и обязан быть точным
CАватары пользователей
DСтатические JS/CSS файлы
Поддержать проект