Сышышь ты, выходи сюда,
поговорим!

Система кэширования Drupal 7. Часть первая: сегменты кэша.

Опубликовано: 27.09.2017

По опыту начал замечать, что многие разработчики, особенно junior/mid уровня, имеют довольно слабое представление о системе кэширования Друпала. До сих пор ни один разработчик не ответил мне правильно на все вопросы о хранилищах и назначении стандартного кэша, который включается в ядро Друпала уже достаточно давно. Мне кажется, уже пора раз и навсегда закрыть этот вопрос.

Я надеюсь, самые базовые знания о том, что такое кэш у вас есть. Если же нет – сначала надо прочитать вводную статью о кэше , а потом продолжать чтение текущей.

Кэш Друпала хранится не в одном единственном месте, а разбит по сегментам. По умолчанию в Друпале каждый сегмент кэша находится в базе данных в виде таблиц под определённым именем. Это сделано по нескольким причинам:

Во-первых, это позволяет выносить определённые сегменты кэша в другие системы хранения кэша (например, в Memcached или Boost). Некоторые сегменты кэша обновляются чаще, другие реже. Это стоит учитывать при разработке сайта, и пробовать разные системы хранения кэша. Во-вторых, это повышает производительность работы с кэшем – в меньших объёмах данных работа с записями происходят быстрее. Более того, при определённых действиях кэш может очищаться частично (сегментно). Согласитесь, в базе данных гораздо быстрее выполнится полная очистка таблицы (TRUNCATE), нежели частичное удаление при помощи %LIKE% .

На текущий момент ( Drupal 7.15 ) ядро Друпала вместе со стандартными модулями насчитывает 11 различных сегментов кэша. Предлагаю разобрать каждый из них подробно.

Общее хранилище кэша.

{cache} - сегмент для общего хранилища кэша. Сюда попадают данные, которые невозможно классифицировать, либо же нет смысла создавать под них новый сегмент кэша. По большому счёту, это своего рода сток различных данных кэша.

rss