Кэширование — техника оптимизации производительности, при которой копия ресурса хранится ближе к потребителю или в более быстром хранилище. При повторном запросе данные берутся из кэша без обращения к оригинальному источнику.
Уровни кэширования
- Browser cache — браузер кэширует JS, CSS, изображения (Cache-Control: max-age).
- CDN cache — CDN-ноды кэшируют контент рядом с пользователем.
- Reverse proxy cache — Nginx или Varnish кэшируют HTML-ответы.
- Application cache — Redis/Memcached для результатов запросов к БД, API-ответов.
- Database query cache — MySQL query cache (устарел, удалён в 8.0).
- OPcache — PHP кэширует скомпилированный байткод скриптов.
HTTP Cache-Control
# Кэшировать на 1 год (статические файлы с хэшем в имени)
Cache-Control: public, max-age=31536000, immutable
# Не кэшировать (HTML, API)
Cache-Control: no-cache, no-store
# Кэш только на клиенте
Cache-Control: private, max-age=3600
Nginx кэширование
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout;
proxy_pass http://backend;
}
Инвалидация кэша
«Две сложные задачи в computer science: инвалидация кэша и именование вещей» (Фил Карлтон). Стратегии инвалидации: TTL (time-to-live), cache-busting (хэш в имени файла), событийная инвалидация (при изменении данных).
История
Концепция кэша появилась в процессорной архитектуре в 1960-х годах. HTTP кэширование стандартизировано в RFC 2616 (1999). Redis создан в 2009 году как универсальный кэш и хранилище. Varnish Cache — 2006.
Связь с хостингом
На VDS кэширование — первый шаг оптимизации нагруженного сайта. WordPress + Redis Object Cache снижает нагрузку на MySQL в 5–20 раз. Nginx FastCGI cache кэширует HTML от PHP. OPcache обязателен для любого PHP-сайта. CDN снимает статику с сервера.
История кеширования в веб
Концепция кеширования в компьютерах восходит к 1968 году (кеш процессора IBM System/360). Кеш браузера появился в первых версиях NCSA Mosaic (1993). HTTP-заголовки Cache-Control стандартизированы в RFC 2616 (HTTP/1.1, 1999). Varnish Cache — высокопроизводительный HTTP-кеш — создан в 2006 году командой Dagfinn Ilmari Mannsaker для норвежской газеты VG. Redis как универсальный кеш-слой появился в 2009 году.
Уровни кеширования на хостинге
| Уровень | Инструмент | TTL |
|---|---|---|
| Браузер | Cache-Control, ETag | часы-месяцы |
| CDN | Cloudflare, BunnyCDN | минуты-дни |
| Reverse proxy | Nginx FastCGI cache, Varnish | секунды-часы |
| Приложение | Redis, Memcached | настраиваемо |
| База данных | MySQL query cache, pg_bouncer | сессия |
Типичные ошибки
- Кеширование страниц авторизованных пользователей — утечка личных данных другим пользователям.
- Бесконечный TTL для HTML-страниц — обновления сайта не доходят до пользователей.
- Отсутствие инвалидации кеша при обновлении WordPress — устаревший контент неделями виден в CDN.
- Кеш не учитывает cookies: разные ответы для авторизованных и гостей должны разделяться.