Таблица cache
Таблица cache является одной из основных таблиц кеширования в Drupal. Она используется для временного хранения предварительно рассчитанных или полученных данных, чтобы избежать повторных дорогостоящих операций при повторных запросах. Это значительно повышает производительность сайта.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cid |
varchar(255) |
Первичный ключ. Уникальный идентификатор кеш-записи (Cache ID). Обычно представляет собой хеш или уникальное имя, по которому можно получить данные. |
data |
longblob |
Сериализованные данные, которые были сохранены в кеше. Могут быть массивом, объектом, строкой и т.д. |
expire |
int |
Время истечения срока действия кеш-записи в формате Unix timestamp. Значение 0 означает, что запись никогда не истекает. Значение -1 (CACHE_PERMANENT) означает, что элемент кеша не будет удален при стандартной очистке просроченных данных.
|
created |
int |
Время создания кеш-записи в формате Unix timestamp. |
serialized |
smallint |
Флаг, указывающий, были ли данные сериализованы перед сохранением. 0 - не сериализованы, 1 - сериализованы.
|
tags |
longtext |
Пространство для хранения тегов кеша, разделенных переводом строки. Теги используются для инвалидации (признания недействительными) групп связанных кеш-записей. |
checksum |
varchar(255) |
Контрольная сумма тегов, используемая для проверки целостности данных при инвалидации по тегам. |
Как это работает
Когда модулю или ядру Drupal требуется сохранить данные для повторного использования, они используют кеш-API. Данные вместе с уникальным идентификатором (cid) и, опционально, тегами и временем жизни сохраняются в таблице cache.
При последующих запросах система сначала проверяет наличие актуальной записи в кеше по её cid. Если запись найдена и её срок действия (expire) не истек, данные десериализуются и возвращаются, что позволяет избежать повторного выполнения сложной логики или запросов к базе данных.
Управление кешем осуществляется через механизм инвалидации. Записи могут быть удалены по истечении срока их действия (expire), явно удалены по их идентификатору (cid) или инвалидированы по тегам (tags). Например, при сохранении нового материала узел (node) помечается тегом node:1. Все кеш-записи, связанные с этим тегом (например, кеш отображения этого узла, кеш списков, где он присутствует), будут автоматически очищены, чтобы обеспечить актуальность данных на страницах.
Для ещё большей производительности Drupal может использовать альтернативные бэкенды кеширования, такие как Redis, Memcache или APCu. В этих случаях таблица cache может использоваться реже или не использоваться вовсе, но её структура и API остаются стандартом.
Пример SQL-запроса
Посмотреть все не просроченные записи в кеше для определенного модуля можно следующим запросом:
SELECT cid, created, expire
FROM cache
WHERE cid LIKE 'my_module:%' AND (expire = 0 OR expire > UNIX_TIMESTAMP())
ORDER BY created DESC;
Смотрите также
-
таблицу
cache_bootstrap,
которая хранит критически важный для загрузки ядра кеш -
таблицу
cache_render,
которая предназначена для кеширования рендер-массивов -
таблицу
cache_config,
которая используется для кеширования конфигурации -
таблицу
cache_data,
которая является обобщенной таблицей для произвольных данных