Кэширование — сохранение копий данных в быстродоступном хранилище для ускорения повторного доступа к ним. Браузер сохраняет CSS и изображения чтобы не загружать их заново при следующем визите. Сервер сохраняет готовые HTML-страницы чтобы не генерировать их из базы данных при каждом запросе. Итог — страница загружается быстрее, нагрузка на сервер снижается.
Что такое кэширование
Кэш (cache) — временное хранилище данных между источником данных и потребителем. Когда потребитель запрашивает данные — система сначала проверяет кэш. Если данные там есть (cache hit) — возвращает их из кэша без обращения к источнику. Если данных нет (cache miss) — обращается к источнику, получает данные и сохраняет копию в кэше для следующих запросов.
Принцип кэширования основан на двух наблюдениях. Первое — временная локальность: если данные запрошены сейчас, вероятно они понадобятся снова в ближайшем будущем. Второе — пространственная локальность: если запрошены одни данные, соседние данные тоже скоро понадобятся.
Применяется на всех уровнях компьютерных систем: кэш процессора (L1/L2/L3) хранит часто используемые инструкции и данные ближе к ядру, оперативная память кэширует данные с жёсткого диска, SSD кэширует данные с HDD в гибридных системах, браузер кэширует ресурсы сайтов, CDN кэширует статические файлы ближе к пользователю, серверное ПО кэширует результаты запросов к базе данных и готовые HTML-страницы.
Кэширование данных — что это такое
Кэширование данных — сохранение результатов дорогостоящих операций с данными: запросов к базе данных, обращений к внешним API, вычислений. Вместо повторного выполнения запроса система возвращает сохранённый результат.
Пример: интернет-магазин выводит список товаров категории. Без кэширования — при каждом запросе страницы выполняется SQL-запрос к базе данных, база возвращает список товаров, PHP собирает HTML. С кэшированием — первый запрос выполняется стандартно, готовый HTML или результат SQL-запроса сохраняется в кэш (Redis, Memcached, файл). Следующие 1000 запросов получают данные из кэша за миллисекунды без обращения к базе.
Ключевой параметр кэша — TTL (Time To Live), время жизни записи. По истечении TTL запись считается устаревшей и при следующем запросе обновляется из источника. Выбор TTL — баланс между актуальностью данных и нагрузкой на систему.
Виды кэширования

- Браузерное кэширование. Браузер сохраняет статические ресурсы — CSS, JavaScript, изображения, шрифты — на устройстве пользователя. При повторном посещении сайта ресурсы загружаются с диска устройства а не с сервера. Управляется HTTP-заголовками: Cache-Control задаёт политику кэширования, Expires задаёт дату истечения, ETag и Last-Modified позволяют браузеру проверить актуальность кэшированного ресурса.
- Серверное кэширование страниц. Готовые HTML-страницы сохраняются на сервере. При запросе сервер отдаёт сохранённый файл минуя PHP, базу данных и весь стек приложения. Самый эффективный вид кэширования для CMS — снижает время ответа с сотен миллисекунд до единиц миллисекунд.
- Кэширование объектов (Object Cache). Результаты запросов к базе данных сохраняются в памяти — Redis или Memcached. Следующий запрос получает данные из памяти не обращаясь к базе. Используется совместно с серверным кэшированием страниц — ускоряет динамические части сайта которые не могут быть полностью закэшированы на уровне страниц.
- CDN-кэширование. Content Delivery Network — сеть серверов распределённых географически. Статические ресурсы и иногда целые страницы кэшируются на узлах CDN ближайших к пользователю. Пользователь из Владивостока получает ресурсы с CDN-узла в Азии а не с сервера в Москве — задержка снижается.
- Кэширование операционной системы. ОС кэширует данные с диска в оперативной памяти (page cache). Файлы к которым часто обращаются хранятся в RAM — чтение происходит в разы быстрее чем с диска.
- Кэш процессора. L1, L2, L3 кэш — сверхбыстрая память внутри процессора хранящая часто используемые инструкции и данные. Доступ к L1 кэшу — около 1 нс, к оперативной памяти — 60–100 нс, к SSD — тысячи нс. Управляется аппаратно без участия программиста или системного администратора.
| Вид кэширования | Где хранится | Что кэшируется | Управление |
|---|---|---|---|
| Браузерный кэш | Устройство пользователя | CSS, JS, изображения | HTTP-заголовки |
| Серверный кэш страниц | Сервер (файлы/RAM) | Готовые HTML-страницы | Плагины, конфиг сервера |
| Object Cache | RAM (Redis/Memcached) | Результаты запросов к БД | Код приложения |
| CDN | Серверы CDN | Статические файлы, страницы | Настройки CDN |
| Кэш ОС | Оперативная память | Файлы с диска | Автоматически |
| Кэш процессора | Процессор | Инструкции и данные | Аппаратно |
Как настроить кэширование через файл .htaccess

Файл .htaccess — конфигурационный файл веб-сервера Apache. Позволяет управлять поведением сервера на уровне директории без доступа к глобальной конфигурации. Через .htaccess настраивают браузерное кэширование статических ресурсов — указывают серверу какие заголовки отправлять браузеру.
Файл .htaccess находится в корневой директории сайта. Если файла нет — создайте его через FTP или файловый менеджер хостинга.
Настройка кэширования через mod_expires
Модуль mod_expires управляет заголовком Expires — датой истечения кэша. Браузер не будет перезапрашивать ресурс до этой даты.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
# Изображения
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# CSS и JavaScript
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
# Шрифты
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType application/font-woff "access plus 1 year"
# HTML и данные
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
</IfModule>
Логика значений TTL: изображения и шрифты меняются редко — 1 год. CSS и JavaScript — 1 месяц (обновляются при изменениях дизайна). HTML-страницы — 0 секунд (содержимое может измениться в любой момент).
Настройка кэширования через mod_headers
Модуль mod_headers позволяет управлять заголовком Cache-Control — более гибким современным механизмом кэширования.
<IfModule mod_headers.c>
# Изображения и шрифты — кэш на 1 год
<FilesMatch "\.(ico|jpg|jpeg|png|gif|webp|svg|woff|woff2|ttf|eot)$">
Header set Cache-Control "max-age=31536000, public, immutable"
</FilesMatch>
# CSS и JavaScript — кэш на 1 месяц
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# HTML — не кэшировать
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</FilesMatch>
</IfModule>
Директива immutable сообщает браузеру что файл никогда не изменится — браузер не будет проверять его актуальность даже при принудительном обновлении страницы. Используется только для файлов с версионированием в имени (style.v2.css, app.1a2b3c.js).
Включить сжатие gzip через .htaccess
Сжатие gzip снижает объём передаваемых данных — текстовые ресурсы (HTML, CSS, JS) сжимаются в 2–10 раз. Настраивается в .htaccess через mod_deflate:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/xml
</IfModule>
Изображения (JPEG, PNG, WebP) сжимать через gzip не нужно — они уже используют собственное сжатие, повторное сжатие не даёт эффекта и создаёт лишнюю нагрузку на сервер.
Полный блок кэширования для .htaccess
Готовый блок объединяющий браузерное кэширование и сжатие — вставляется в начало файла .htaccess:
# Сжатие gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
AddOutputFilterByType DEFLATE text/plain application/json image/svg+xml
</IfModule>
# Браузерное кэширование
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/html "access plus 0 seconds"
</IfModule>
После сохранения изменений в .htaccess проверьте работу кэширования через PageSpeed Insights или Chrome DevTools → вкладка Network → колонка Cache-Control в заголовках ответа.
Кэширование WordPress — плагины и настройка

WordPress генерирует страницы динамически: при каждом запросе PHP обращается к базе данных, собирает контент, применяет шаблоны и отдаёт готовый HTML. Без кэширования каждый посетитель инициирует этот цикл заново. Плагин кэширования сохраняет готовый HTML и отдаёт его напрямую минуя PHP и базу данных.
WP Super Cache
WP Super Cache — плагин кэширования от Automattic, разработчиков WordPress. Более 2 миллионов активных установок. Генерирует статические HTML-файлы страниц на диске сервера. Три режима работы: простой (через PHP, совместимость максимальная), расширенный (через mod_rewrite в .htaccess, скорость максимальная), WP-Cache (через PHP с поддержкой cookies).
Для максимальной скорости используют расширенный режим — Apache отдаёт статический HTML файл напрямую не запуская PHP. Настройка: Параметры → WP Super Cache → вкладка «Просто» → выбрать «Кэширование включено» → сохранить → вкладка «Дополнительно» → выбрать «Использовать mod_rewrite для обслуживания файлов кэша».
W3 Total Cache
W3 Total Cache — наиболее функциональный бесплатный плагин кэширования для WordPress. Охватывает все уровни кэширования: страницы, объекты базы данных, фрагменты, браузерный кэш, интеграция с CDN. Поддерживает Redis и Memcached как хранилища для object cache.
Настройка значительно сложнее чем у WP Super Cache — требует понимания принципов работы кэша. Для стандартного сайта достаточно включить: Page Cache (режим Disk: Enhanced), Browser Cache (включить все опции сжатия и заголовков), Minify (объединение и минификация CSS и JS).
LiteSpeed Cache
LiteSpeed Cache работает в полную силу только на хостингах с веб-сервером LiteSpeed — многие shared-хостинги (Reg.ru, Beget, TimeWeb) поддерживают LiteSpeed. На Apache функциональность ограничена.
При совместимом сервере LiteSpeed Cache даёт наилучшие результаты среди бесплатных решений: серверное кэширование на уровне веб-сервера (быстрее чем PHP-кэш), автоматическая оптимизация изображений и конвертация в WebP, отложенная загрузка изображений, Critical CSS, минификация. Настройка через интуитивный интерфейс с пресетами.
WP Rocket
WP Rocket — платный плагин кэширования ($59/год для одного сайта). Де-факто стандарт для производительных WordPress-сайтов. Включает: кэширование страниц, сжатие и объединение CSS/JS, отложенную загрузку изображений, предзагрузку кэша, удаление неиспользуемого CSS, интеграцию с CDN и object cache. Настройка через простой интерфейс без технических знаний.
| Плагин | Стоимость | Сложность настройки | Object Cache |
|---|---|---|---|
| WP Super Cache | Бесплатно | Низкая | Нет |
| W3 Total Cache | Бесплатно | Высокая | Redis, Memcached |
| LiteSpeed Cache | Бесплатно | Средняя | Redis |
| WP Rocket | $59/год | Низкая | Через расширение |
Как отключить кэширование WordPress
Отключение кэша нужно при разработке и отладке — чтобы изменения отображались немедленно без очистки кэша.
Через плагин: найдите кнопку «Очистить кэш» или «Purge Cache» в административной панели — она появляется в верхней панели WordPress после установки плагина кэширования. Большинство плагинов добавляют кнопку полной очистки кэша.
Полное отключение кэширования: деактивируйте плагин кэширования через Плагины → Активные плагины → Деактивировать. Для WP Super Cache дополнительно проверьте что из .htaccess удалены правила кэширования (плагин удаляет их автоматически при деактивации).
На хостинге Reg.ru: кэширование может быть включено на уровне хостинга независимо от плагинов WordPress. Для отключения: панель управления хостингом → раздел «Сайты» → настройки сайта → отключить кэширование. Актуально при отладке — включайте обратно после завершения работ.
PHP-кэширование

PHP-кэширование работает на нескольких уровнях: кэш байт-кода (OPcache), кэш пользовательских данных (APCu, Redis, Memcached).
OPcache — кэш байт-кода PHP
PHP-скрипты компилируются в байт-код при каждом выполнении. OPcache сохраняет скомпилированный байт-код в памяти — при следующем запросе PHP не компилирует файл заново. Ускорение — от 2 до 10 раз в зависимости от приложения.
OPcache входит в стандартную поставку PHP начиная с версии 5.5. Включается в php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
Большинство хостингов включают OPcache по умолчанию. Проверить: phpinfo() → найти раздел «opcache» → статус «enabled».
Кэширование данных в PHP через Redis
Redis — хранилище данных в памяти используемое для кэширования результатов запросов к базе данных, результатов API-вызовов, сессий. Работает как key-value хранилище с поддержкой TTL.
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'products_category_' . $categoryId;
$cached = $redis->get($cacheKey);
if ($cached) {
$products = json_decode($cached, true);
} else {
$products = $db->query("SELECT * FROM products WHERE category_id = ?", $categoryId);
$redis->setex($cacheKey, 3600, json_encode($products)); // TTL 1 час
}
Кэширование страниц в PHP
Простое файловое кэширование HTML-страниц без фреймворка:
$cacheFile = 'cache/' . md5($_SERVER['REQUEST_URI']) . '.html';
$cacheTime = 3600; // 1 час
if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {
echo file_get_contents($cacheFile);
exit;
}
ob_start();
// ... генерация страницы ...
$content = ob_get_clean();
file_put_contents($cacheFile, $content);
echo $content;
Кэширование в других технологиях
Кэширование в Laravel. Laravel имеет встроенный unified cache API поддерживающий драйверы file, database, Redis, Memcached, DynamoDB. Настройка драйвера в config/cache.php. Использование:
// Получить из кэша или выполнить запрос и сохранить
$products = Cache::remember('products', 3600, function () {
return Product::all();
});
// Очистить кэш
Cache::forget('products');
Кэширование в Django. Django поддерживает файловый кэш, кэш в памяти (LocMemCache), Memcached, Redis (через django-redis). Настройка в settings.py:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient"},
"TIMEOUT": 3600,
}
}
Кэширование MySQL. Query Cache в MySQL кэшировал результаты SELECT-запросов. Начиная с MySQL 8.0 Query Cache удалён из-за низкой эффективности при высокой конкурентности. Современный подход — кэширование на уровне приложения через Redis или Memcached. InnoDB Buffer Pool кэширует данные и индексы таблиц в памяти — его размер (innodb_buffer_pool_size) настраивают под объём рабочего набора данных, обычно 70–80% доступной RAM.
Кэширование SSD. В контексте хранения данных SSD используется как кэш для HDD в гибридных системах (Intel Optane, технология кэширования в NAS-устройствах). Горячие данные хранятся на быстром SSD, холодные — на ёмком HDD. Операционные системы и системы хранения управляют этим автоматически без участия пользователя.
Комментарии скоро откроются. А пока — пишите нам в Telegram-канал.