Зачем кэш и где он живёт
Кэш — это держать ответ поближе и побыстрее, чтобы не считать одно и то же дважды.
Кэш — быстрое промежуточное хранилище, где держат копии часто запрашиваемых данных, чтобы не обращаться каждый раз к медленному источнику (базе, диску, удалённому сервису).
Почему кэш так помогает
Чтение из памяти (~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; кэшируют то, что часто читают и редко меняют.