НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
96 of 182 menu

Таблица 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,
    которая хранит структуру и параметры элементов меню
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить