Как очистить кеш Drupal?

Главные вкладки

Аватар пользователя Eugef Eugef 6 апреля 2008 в 19:17

Включил на сайте кеширование и поставил интервал в 10 минут.
Это значит, что мне прийдется настроить, чтобы cron.php также запускался каждые 10 минут? (насколько я понял - именно он очищает кеш)

Есть ли другие способы автоматической очистки кеша?

Например, при обращении анонимного пользователя проверяется время создания кеша и если оно старше установленного времени - кеш обновляется.
Тогда не надо будет cron запускать каждые 10 минут.

Или запуск cron каждые 10 минут не повлияют на быстродействия сайта?

Буду рад любым советам!

Комментарии

Аватар пользователя Eugef Eugef 6 апреля 2008 в 22:25

Этот код очистит таблицы cache, cache_filter, cache_menu, cache_page.

Пример кода я нашел - главная задача чтобы он выполнялся автоматически при каком-нибудь событии, но не по cron!

Аватар пользователя Eugef Eugef 7 апреля 2008 в 17:48

Наверное я плохо объяснил, попробую еще раз.

Как я понял кеш обновляется путем выполнения cron.php - если его запускать раз в день то и кеш раз в день будет обновляться.
Правильно?

Если да, то тогда, чтобы кеш обновлялся каждые 10 минут, надо cron.php на выполнение ставить тоже каждые 10 минут!

Вопрос - как другим способом обновить кеш автоматически!

Как вариант я предложил - при каждом заходе анонимного пользователяя обновлять кеш если он устарел, а не дожидаться когда кеш обновиться вызовом cron.php.

Как это сделать?

Аватар пользователя kiev1 kiev1 8 апреля 2008 в 1:34

Как я понял кеш обновляется путем выполнения cron.php - если его запускать раз в день то и кеш раз в день будет обновляться.
Правильно?

нет не правильно - как в друпале не знаю - но в нормальных CMS кеш обновляется только если изменилось значение первоисточника, а иначе зачем тогда кеш??? только лишняя нагрузка на его обслуживание - например на сайте 5000 страничек и на каждую заходят один раз в час, а кеш очищается раз в 10 минут - тогда вероятность что страничка будет запрошена из кеша повторно - просто нулевая!

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 8 апреля 2008 в 11:28

есть разные концепты кеширования если на то пошло...
если у вас идет обновление страниц 10-100 раз в секунду каким нить из пользователей? Ы?

я все понимаю но на самом деле кешировать есть смысл но можно например чистить кеш с определенной вероятность в 1-10% как это например zend framework позволяет, скомбинировав это с максимальным временем жизни...

ТОПИКСТАРТЕР, тебе можт свой механизм работы кеша нужен? ну так перепеши его Smile

Аватар пользователя edhel edhel 8 апреля 2008 в 7:43

оба поняли неправильно

1) кэш очищается без участия крона! столько этим паритесь... уже бы могли бы сами проверить - включите кэш, поставьте время 1 мин, измените какую-нибудь ноду и посмотрите когда она изменится у анонима.

2) если изменить ноду, то кэш страниц автоматом при этом не очищается (это можно реализовать самому, если хочется)

Аватар пользователя Eugef Eugef 9 апреля 2008 в 16:59

У меня на главной странице (http://ww.interesno.name) выводится список материалов с кол-вом просмотров и рейтингом.
Если я включаю кеш и голосую за статью из-под авторизированного пользователя, то аноним на главной странице этих изменений не увидит, пока не сработает крон.

Отсюда я сделал вывод, что кеш обновляется именно по крону.

Также на главной странице есть блок со списком недавно прочитанных статей, он тоже для анонима обновляется только после запуска крона.

Ради эксперимента поставил крон каждые 10 минут - кеш обновлялся нормально.

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

Аватар пользователя edhel edhel 9 апреля 2008 в 19:21

Да чё вы привязались к этому крону.... у меня сайты без крона есть и с кэшем и всё обновляется. Сами функции, которые работают с кэшем (сохраняют/извлекают данные) ответственны за очистку кэша. Вот кусок:

<?php
function cache_get($key, $table = 'cache') {
global $user;

// Garbage collection necessary when enforcing a minimum cache lifetime
$cache_flush = variable_get('cache_flush', 0);
if ($cache_flush && ($cache_flush + variable_get('cache_lifetime', 0) <= time())) { <<<<<<<<<<<<<<<<<<<<< проверка времени
// Time to flush old cache data
db_query("DELETE FROM {". $table ."} WHERE expire != %d AND expire <= %d", CACHE_PERMANENT, $cache_flush); <<<<<< удаление старых значений
variable_set('cache_flush', 0);
}
...
?>

Аватар пользователя Eugef Eugef 10 апреля 2008 в 11:39

За код спасибо - а как его автоматически выполнять по событию (например после добавления коммента или прочтения статьи)?

Аватар пользователя edhel edhel 11 апреля 2008 в 12:57

Только что протестировал опять: сайт на drupal 6, без крона, врубаю кэш на 1 минуту, гружу главную страницу в IE анонимом, меняю в файрфоксе одну новость, обновляю страницу в IE - текст старый, жду 1 минуту, обновляю - текст новый.

Аватар пользователя edhel edhel 12 апреля 2008 в 9:16

почему крон в ядро не включат?

ниасилил

почему на каждый чих надо отдельный модуль

Вы можете представить cms, в которой ВСЁ включено и всё решаемо кликами мышкой?

Аватар пользователя kiev1 kiev1 12 апреля 2008 в 16:30

по другому - покажите например еще такую странную CMS в которой что бы сделать заголовок статьи надо было ставить отдельный модуль )))

Аватар пользователя juliv juliv 7 мая 2008 в 14:20

мне кажется, я понял в чём дело.
Eugef, вы наверно используете модуль Boost для кеширования страниц сайта.
Тогда всё понятно. У меня тоже стоит этот модуль и обновление проиходит только в случае запуска крона, либо путем удаления созданных модулем статичных html страничек.
С кешем на MySQL таких проблем нет, но потребовался именно кеш на файлах в моём случае.

Аватар пользователя Emilio13 Emilio13 30 июня 2009 в 12:09

Столкнулся с аналогичной проблемой - кэш почему-то автоматом не очищается (друпал 6, модули кэширования стандратные). Жму кнопку очистить кэш - все ок.

Аватар пользователя Azerot Azerot 20 ноября 2009 в 22:42

И у меня такая же баня! Причём вот что странно - у меня сайт может открываться и с www и без него. Так вот, на главной странице с www кэш обновляется, а если главную без www вызывать - нет! Что за шляпа такая?