Таблица cache_field
Таблица cache_field является частью системы кеширования Drupal и отвечает за хранение предварительно вычисленных данных, связанных с полями сущностей (нодов, пользователей, терминов таксономии и других). Основная цель - значительно ускорить обработку и вывод полей на страницах сайта, избегая повторных тяжелых вычислений или запросов к базе данных при каждом обращении к контенту.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cid |
varchar(255) |
Первичный ключ. Уникальный идентификатор записи в кеше (Cache ID). Формируется на основе типа кешируемых данных и их идентификаторов. |
data |
longblob |
Сериализованные данные, которые были закешированы. Может содержать массив, объект или любое другое значение, подготовленное для быстрого использования. |
expire |
int |
Временная метка Unix, указывающая, когда запись кеша становится недействительной. Значение 0 означает, что запись не имеет срока годности. Значение -1 означает, что запись уже просрочена и должна быть удалена.
|
created |
int |
Временная метка Unix, указывающая, когда была создана эта запись кеша. |
serialized |
smallint |
Флаг, указывающий, были ли данные сериализованы перед сохранением. 1 - данные сериализованы, 0 - нет (например, для простых строк или чисел).
|
tags |
longtext |
Список тегов, связанных с этой записью кеша, разделенный переводом строки. Теги используются для инвалидации (признания недействительными) групп связанных записей кеша. Например, при обновлении определенного поля можно сбросить весь кеш с тегом этого поля. |
checksum |
varchar(255) |
Контрольная сумма, используемая для проверки целостности тегов при инвалидации кеша. |
Как это работает
Когда Drupal впервые обрабатывает данные поля (например, загружает значения поля или применяет к ним форматтер), выполняется относительно сложная работа: загрузка конфигурации поля, его настроек отображения, рендеринг элементов. Результат этой работы сериализуется и сохраняется в таблице cache_field с уникальным cid.
При последующих запросах, требующих тех же данных, система сначала проверяет их наличие в этом кеше. Если валидная запись найдена (expire > текущего времени), данные десериализуются и используются напрямую, без выполнения всей цепочки вычислений. Это экономит значительные процессорные ресурсы и время.
Записи в кеше становятся неактуальными (инвалидируются) при изменении связанных данных. Это обеспечивается системой тегов (tags). Например, запись кеша, содержащая отрендеренное поле ноды, будет помечена тегами этой ноды и этого поля. При обновлении ноды или конфигурации поля запускается процесс инвалидации, который находит и удаляет все записи кеша, связанные с соответствующими тегами.
Автоматическая очистка кеша (например, по расписанию cron) удаляет записи с истекшим сроком действия (expire < текущего времени) для поддержания размера таблицы в разумных пределах.
Пример SQL-запроса
Посмотреть все активные записи в кеше полей для определенного тега (например, для ноды с ID 42) можно следующим запросом:
SELECT cid, created, expire
FROM cache_field
WHERE tags LIKE '%node:42%' AND expire > UNIX_TIMESTAMP();
Смотрите также
-
таблицу
cache_data,
которая является общей таблицей кеширования данных -
таблицу
cache_bootstrap,
которая хранит кеш для критически важных данных начальной загрузки -
таблицу
cache_render,
которая предназначена для кеширования рендер-массивов и HTML-вывода -
таблицу
cache_discovery,
которая кеширует обнаруженные метаданные (плагины, хуки)