БлогНовый Cache Expiration - полная свобода в выборе правил для сброса кэша страниц

В данной статье я хотел бы поговорить о сбросе кэша страниц. По сути, эта статья вытекает из материала про Memcache Storage Page Cache и снижение нагрузки на сервер. Однако как верно заметил товарищ @quicksketch, в моём Memcache Storage PC не было ничего, что привязывало бы этот модуль конкретно к мемкэшу. После небольшого обсуждения было решено смержить все его фичи в Cache Expiration, который на тот момент включал в себя крайне много хардкода. Потратив приличное время на объединение Memcache Storage PC и Cache Expiration, а потом и на написание новых фич (и в итоге переписав всё с нуля) была создана вторая ветка этого великолепного модуля - Cache Expiration 7.x-2.x.

Что умеет модуль?

  • Во-первых, он сохранил в себе всю гибкость Memcache Storage PC. А именно - сбрасывается только то, что было указано в настройках (привет тем, кто пользуется первой веткой модуля).
  • Во-вторых, он приобрёл дополнительные фичи в виде интеграции с Rules, Drush и другими модулями.
  • В-третьих, была приведена в порядок документация.
  • В-четвёртых, если вас не устраивает как происходит сброс кэша для какой-либо сущности, достаточно просто переопределить в настройках определённый класс и написать реализацию под свои нужды.

Теперь о настройках по порядку. Главная страница с настройками (admin/config/system/expire) имеет следующие настройки:

expire_1.png

Как видно на скриншоте, модуль научился очищать кэш самостоятельно, используя cache_clear_all(). В админке теперь показывается список всех модулей, с которыми есть интеграция через hook_expire_cache(). Добавлена возможность управлять режимом отладки. Она включат в себя вывод списка страниц, для которых сбрасывается кэш.

На этой же странице с настройками сделана удобная возможность указывать после каких действий будет сброшен кэш, и для каких страниц этот кэш надо сбрасывать. Здесь можно указывать и кастомные страницы (например, rss.xml). Удобной фичей является возможность использовать токены сущности, для которой очищается кэш:

expire_2_0.png

Если вы хотите настроить сброс кэша страниц в зависимости от типа материала - просто перейдите в настройки этого типа материала. Здесь модуль позволяет перекрыть настройки сброса кэша, заданные на главной странице:

expire_4.png

Если вам и этого покажется мало, то интеграция с Rules должна решить все проблемы. Я рекомендую включить в этом случае обработчик PHP и сбрасывать абсолютно кастомные страницы:

expire_5.png

Интеграция с Drush

Ну и дополнительной фичей являются 5 команд, которые позволяют очищать кэш страниц из консоли:

1. expire-url (xp-url) - сбрасывает кэш для указанных страниц. Страницы передаются абсолютными путями (с http). Например:

drush xp-url http://example.com/ http://example.com/logo.jpg

2. expire-path (xp-path) - сбрасывает кэш для указанных страниц. Страницы передаются в виде внутренних путей (без http). Пример:

drush xp-path node/1 taxonomy/term/17 FRONT

3. expire-node (xp-node) - запускает сброс кэша страниц для указанных материалов. Сброс кэша происходит с учётом настроек, заданных для этого типа материала в админке. Пример:

drush xp-node 2 24 612

4. expire-user (xp-user) - запускает сброс кэша страниц для указанных пользователей. Сброс кэша происходит с учётом настроек, заданных для пользователей в админке. Пример:

drush xp-user 2 24 612

5. expire-comment (xp-comment) - запускает сброс кэша страниц для указанных комментариев. Сброс кэша происходит с учётом настроек, заданных для комментариев в админке. Пример:

drush xp-comment 2 24 612

P.S. В завершении я хотел бы отметить, что Memcache Storage Page Cache завершил своё существование (а точнее - вырос в нечто намного большее). Автоматической миграции с Memcache Storage PC на Cache Expiration нет из-за малого количества пользователей, которые им пользовались.

Также выражаю благодарность @mikeytown2, который любезно пустил меня в разработчики Cache Expiration (хоть он этого и не прочитает).

Комментарии

Аватар пользователя node
node написал:

ссылка на модуль "not found"

26.07.2013 23:12
Аватар пользователя Spleshka
Spleshka написал:

Fixed.

26.07.2013 23:51
Аватар пользователя Гость
Гость написал:

Если в настройках модуля указать что при добавлении ноды сбрасывать кеш терминов, то сбрасывается только первая страница термина, остальные вида term?page=3 остаются старыми, хотя анонсы материалов смещаются.

Подскажите, пожалуйста, как сбрасывать все страницы термина?

29.07.2013 21:08
Аватар пользователя Spleshka
Spleshka написал:

Если не сложно - закиньте ишью на друпал.орг, надо это сделать в автоматическом режиме.
А вообще можно сделать через кастомные страницы:

your-page-with-terms?page=|wildcard
30.07.2013 12:06
Аватар пользователя Гость
Гость написал:

Скажите его к settings.php нужно подключать, если да то как?

30.07.2013 11:27
Аватар пользователя Spleshka
Spleshka написал:

Нет, не надо никуда подключать.

30.07.2013 12:04
Аватар пользователя new_line
new_line написал:

а со стандартными механизмами сброса кеша ,настройки которого /admin/config/development/performance
конфликтов не будет?

18.08.2013 08:30
Аватар пользователя Niklan
Niklan написал:

Самый, наверное, важный для меня вопрос по этому модулю.
Как будет в связке с Boost + Rate. Ибо просто в такой связке, нажатые кнопки rate засчитываются после сброса кэша. Т.е. засчитываются то сразу, а вот видят все после сброса кэша. Так вот, если данным модулем, запилить рулз, чтобы после оценки сбрасывался кэш у страницы, то бага будет исправлена. Это реально? Чот влом его ставить пока, может уже кто проверял. Из того что я вычитал он какраз для таких ситуаций и предназначен.

18.08.2013 11:13
Аватар пользователя Benya
Benya написал:

Наверное стоит самому и проверить. Проблема Ваша и решать ее за Вас никто не будет. Заодно и остальным расскажите:)

18.08.2013 19:15
Аватар пользователя Niklan
Niklan написал:

Сильно сказано :) Проблема вообще то всех сайтов на Boost. Будет время оттестирую.

19.08.2013 13:10
Аватар пользователя Spleshka
Spleshka написал:

Должно работать. Там как раз есть сброс кэша страниц после голосования, эта функция уже внедрена в модуль, даже Рулз не надо использовать.

21.08.2013 19:02
Аватар пользователя Сергей
Сергей написал:

Здравствуйте, у меня нубо вопрос, а для views его можно настроить или во views собственное включать?

26.08.2013 11:38
Аватар пользователя Poly
Poly написал:

Тоже интересует по поводу views. А вообще если у меня материал исключительно от импорта файла в Feeds мне этот модуль Cache Expiration подойдёт или использовать Views content cache так как все материалы будут выводится через модуль views? Никаких комментов и произвольных материалов не будет. Что посоветуете?

22.12.2013 13:53
Аватар пользователя Nix
Nix написал:

А насколько стабильна версия 2.0? Можно смело устанавливать?

16.01.2014 22:54
Аватар пользователя Spleshka
Spleshka написал:

Стабильна, ставьте без боязни :)

17.01.2014 11:03
Аватар пользователя Гость
Гость написал:

При активации версии 7.x-2.x-dev вылезает баг - не открывается страница редактирования типа материала. Просто белый экран

13.02.2014 20:43
Аватар пользователя AmiGator
AmiGator написал:

Так что, получается, если в «списке всех модулей, с которыми есть интеграция через hook_expire_cache()» нет моего (использую filecache), то данный метод работать не будет и нужно ставить Internal expiration? А то с ходу не понятно…

10.04.2014 17:18
Аватар пользователя Александр Анатольевич Панько
Александр Анато... написал:

Все отлично можно ставить не боятся

04.08.2014 11:15
Аватар пользователя Николай
Николай написал:

Не работает Page Title вместе с ним, все токены пропадают.

13.08.2014 13:04
Аватар пользователя Сергей-2
Сергей-2 написал:

Интересно - проблемы с Page Title решены? или это частный глюк?

20.11.2014 10:26
Аватар пользователя Елена
Елена написал:

как этот модуль определяет время актуальности кэша? откуда он берет параметры?

10.12.2014 09:32
Аватар пользователя Сергей1
Сергей1 написал:

Вопрос чайника - ваш модуль Cache Expiration должен работать один, или для его работы нужен еще модуль Memcache? А может еще какие должны стоять модули?

Спрашиваю, потому что не могу разобраться - кэширование работает, но не так как нужно. Не сбрасывается кэш в результате сработки действий в настройки модуля. Сейчас у меня Memcache отключен, и другие модули для работы с кэшем не стоят.

еще в settings.php установлены настройки:

$conf['cache_backends'][] = 'sites/all/modules/memcache_storage/memcache_storage.inc';
$conf['cache_default_class'] = 'MemcacheStorage';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

они должны быть включены?

Совсем запутался....

10.04.2016 20:43

Комментировать