Таблица cache_menu
Таблица cache_menu является одной из стандартных кеш-таблиц Drupal и отвечает за хранение кешированных данных, связанных с меню системы. Основная цель её существования - значительно повысить производительность сайта за счёт сокращения времени, необходимого для построения и рендеринга меню при каждом запросе.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cid |
varchar(255) |
Первичный ключ. Уникальный идентификатор кеш-записи (Cache ID). Обычно формируется на основе имени меню, языка и других параметров контекста. |
data |
longblob |
Сериализованные данные кеша. Здесь хранится предварительно сгенерированная структура меню (дерево ссылок) или другие данные, связанные с меню, готовые к быстрому использованию. |
expire |
int |
Время истечения срока действия кеш-записи в формате Unix timestamp. Значение 0 означает, что запись не имеет срока годности. Значение -1 означает, что запись просрочена и должна быть удалена.
|
created |
int |
Время создания кеш-записи в формате Unix timestamp. |
serialized |
smallint |
Флаг, указывающий на то, что данные в поле data были сериализованы. 1 - данные сериализованы, 0 - нет.
|
tags |
longtext |
Список тегов кеша, разделённых переводом строки. Теги (например, config:system.menu.[menu_name]) используются для инвалидации (признания недействительными) групп связанных кеш-записей.
|
checksum |
varchar(255) |
Контрольная сумма, используемая для проверки валидности тегов при инвалидации кеша. |
Как это работает
Когда Drupal впервые обрабатывает запрос на отображение меню (например, основного навигационного меню), он выполняет довольно ресурсоёмкую операцию: загружает все ссылки меню, проверяет права доступа текущего пользователя для каждой ссылки, применяет модульные хуки, сортирует элементы и строит итоговое дерево. Чтобы избежать повторения этих вычислений при каждом обращении, результат сохраняется в таблице cache_menu.
При последующих запросах система в первую очередь проверяет наличие валидной (непросроченной) записи в этой таблице по сформированному cid. Если запись найдена, данные десериализуются и используются сразу, что происходит намного быстрее.
Инвалидация (очистка) кеша меню происходит при любых изменениях, влияющих на его содержимое. Это может быть:
- Добавление, редактирование или удаление пункта меню.
- Изменение настроек самого меню.
- Обновление прав доступа (ролей и разрешений) для пунктов меню.
- Явный вызов очистки кеша через административный интерфейс или Drush (команды
drush cache:rebuild,drush cr).
При инвалидации Drupal ищет все записи в cache_menu, помеченные соответствующим тегом (например, config:system.menu.main для главного меню), и удаляет их. При следующем запросе меню кеш будет построен заново с учётом актуальных данных.
Пример SQL-запроса
Посмотреть все активные (непросроченные) кеш-записи для определённого меню можно запросом:
SELECT cid, created, expire
FROM cache_menu
WHERE cid LIKE 'menu_name:%' AND (expire = 0 OR expire > UNIX_TIMESTAMP())
ORDER BY created DESC;
Очистить все записи кеша для конкретного меню по его тегу:
DELETE FROM cache_menu
WHERE tags LIKE '%config:system.menu.main%';
Смотрите также
-
таблицу
cache_bootstrap,
которая хранит критически важный кеш для загрузки Drupal -
таблицу
cache_render,
которая предназначена для кеширования рендер-массивов и HTML-вывода -
таблицу
cache_data,
которая является общим хранилищем для произвольных кешируемых данных -
таблицу
menu_tree,
которая хранит структуру и параметры элементов меню