БлогНовый 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) имеет следующие настройки:
Как видно на скриншоте, модуль научился очищать кэш самостоятельно, используя cache_clear_all(). В админке теперь показывается список всех модулей, с которыми есть интеграция через hook_expire_cache(). Добавлена возможность управлять режимом отладки. Она включат в себя вывод списка страниц, для которых сбрасывается кэш.
На этой же странице с настройками сделана удобная возможность указывать после каких действий будет сброшен кэш, и для каких страниц этот кэш надо сбрасывать. Здесь можно указывать и кастомные страницы (например, rss.xml). Удобной фичей является возможность использовать токены сущности, для которой очищается кэш:
Если вы хотите настроить сброс кэша страниц в зависимости от типа материала - просто перейдите в настройки этого типа материала. Здесь модуль позволяет перекрыть настройки сброса кэша, заданные на главной странице:
Если вам и этого покажется мало, то интеграция с Rules должна решить все проблемы. Я рекомендую включить в этом случае обработчик PHP и сбрасывать абсолютно кастомные страницы:
Интеграция с 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 (хоть он этого и не прочитает).
- Spleshka
- 26.07.2013
- 40623
Комментарии
ссылка на модуль "not found"
Fixed.
Если в настройках модуля указать что при добавлении ноды сбрасывать кеш терминов, то сбрасывается только первая страница термина, остальные вида term?page=3 остаются старыми, хотя анонсы материалов смещаются.
Подскажите, пожалуйста, как сбрасывать все страницы термина?
Если не сложно - закиньте ишью на друпал.орг, надо это сделать в автоматическом режиме.
А вообще можно сделать через кастомные страницы:
Скажите его к settings.php нужно подключать, если да то как?
Нет, не надо никуда подключать.
а со стандартными механизмами сброса кеша ,настройки которого /admin/config/development/performance
конфликтов не будет?
Самый, наверное, важный для меня вопрос по этому модулю.
Как будет в связке с Boost + Rate. Ибо просто в такой связке, нажатые кнопки rate засчитываются после сброса кэша. Т.е. засчитываются то сразу, а вот видят все после сброса кэша. Так вот, если данным модулем, запилить рулз, чтобы после оценки сбрасывался кэш у страницы, то бага будет исправлена. Это реально? Чот влом его ставить пока, может уже кто проверял. Из того что я вычитал он какраз для таких ситуаций и предназначен.
Наверное стоит самому и проверить. Проблема Ваша и решать ее за Вас никто не будет. Заодно и остальным расскажите:)
Сильно сказано :) Проблема вообще то всех сайтов на Boost. Будет время оттестирую.
Должно работать. Там как раз есть сброс кэша страниц после голосования, эта функция уже внедрена в модуль, даже Рулз не надо использовать.
Здравствуйте, у меня нубо вопрос, а для views его можно настроить или во views собственное включать?
Тоже интересует по поводу views. А вообще если у меня материал исключительно от импорта файла в Feeds мне этот модуль Cache Expiration подойдёт или использовать Views content cache так как все материалы будут выводится через модуль views? Никаких комментов и произвольных материалов не будет. Что посоветуете?
А насколько стабильна версия 2.0? Можно смело устанавливать?
Стабильна, ставьте без боязни :)
При активации версии 7.x-2.x-dev вылезает баг - не открывается страница редактирования типа материала. Просто белый экран
Так что, получается, если в «списке всех модулей, с которыми есть интеграция через hook_expire_cache()» нет моего (использую filecache), то данный метод работать не будет и нужно ставить Internal expiration? А то с ходу не понятно…
Все отлично можно ставить не боятся
Не работает Page Title вместе с ним, все токены пропадают.
Интересно - проблемы с Page Title решены? или это частный глюк?
как этот модуль определяет время актуальности кэша? откуда он берет параметры?
Вопрос чайника - ваш модуль Cache Expiration должен работать один, или для его работы нужен еще модуль Memcache? А может еще какие должны стоять модули?
Спрашиваю, потому что не могу разобраться - кэширование работает, но не так как нужно. Не сбрасывается кэш в результате сработки действий в настройки модуля. Сейчас у меня Memcache отключен, и другие модули для работы с кэшем не стоят.
еще в settings.php установлены настройки:
они должны быть включены?
Совсем запутался....
Комментировать