Таблица cache_page
Таблица cache_page является одной из ключевых таблиц системы кеширования Drupal. В ней хранятся готовые HTML-страницы, которые были сгенерированы для анонимных пользователей. Это позволяет значительно ускорить время отклика сайта, так как для последующих запросов на ту же страницу Drupal может отдать готовый HTML из кеша, минуя сложные процессы загрузки сущностей, построения запросов к базе данных и рендеринга темы.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cid |
varchar(255) |
Первичный ключ. Идентификатор кеш-записи. Для страничного кеша это, как правило, URL запрашиваемой страницы. Может также содержать префикс, если используется несколько бэкендов кеширования. |
data |
longblob |
Сериализованные данные, которые были закешированы. В случае cache_page это обычно готовый HTML-код всей страницы или её основных частей.
|
expire |
int |
Временная метка Unix, указывающая, когда запись кеша становится недействительной. Значение 0 означает, что запись не должна expire. Значение -1 означает, что запись уже expired и должна быть удалена при следующем cron run.
|
created |
int |
Временная метка Unix, указывающая, когда была создана данная кеш-запись. |
serialized |
smallint |
Флаг, указывающий, были ли данные сериализованы перед сохранением. 1 означает, что данные сериализованы, 0 - что нет.
|
tags |
longtext |
Пространство для хранения тегов кеша, разделенных переводом строки. Теги используются для инвалидации групп связанных кеш-записей. Например, при обновлении ноды все кеши страниц, где она отображается, будут сброшены по тегу node:{nid}.
|
checksum |
varchar(255) |
Контрольная сумма для тегов, используемая для проверки целостности данных при инвалидации кеша. |
Как это работает
Когда анонимный пользователь запрашивает страницу на сайте Drupal, система проверяет, включен ли модуль Internal Page Cache и есть ли в таблице cache_page действующая (не expired) запись с cid, равным URL запроса. Если запись найдена, её содержимое (поле data) десериализуется и отправляется браузеру пользователя, полностью минуя процесс bootstrap Drupal и рендеринга темы.
Если действующей записи в кеше нет, страница генерируется стандартным образом. После генерации, если пользователь остался анонимным и страница подлежит кешированию, готовый HTML помещается в таблицу cache_page для последующих запросов.
Инвалидация (сброс) кеша происходит по нескольким причинам: истечение времени жизни записи (expire), явный вызов функций сброса кеша (например, cache_invalidate_tags()) или при выполнении очистки кеша через административный интерфейс. Теги (поле tags) позволяют точечно сбрасывать только те страницы, которые зависят от изменившихся данных (например, конкретного узла или термина таксономии).
Важно отметить, что страничный кеш работает только для анонимных пользователей. Для аутентифицированных пользователей используется другие механизмы кеширования (например, Dynamic Page Cache), так как содержимое страницы часто зависит от ролей и permissions пользователя.
Пример SQL-запроса
Посмотреть все активные кеш-записи для главной страницы и её подпутей можно следующим запросом:
SELECT cid, created, expire
FROM cache_page
WHERE cid LIKE '/%' AND expire > UNIX_TIMESTAMP()
ORDER BY created DESC;
Смотрите также
-
таблицу
cache_bootstrap,
которая хранит критически важные для загрузки ядра данные -
таблицу
cache_render,
которая предназначена для хранения кеша рендер-массивов -
таблицу
cache_data,
которая является общим хранилищем для произвольных кешируемых данных -
таблицу
cachetags,
которая используется для отслеживания актуальности записей по тегам