Включил на сайте кеширование и поставил интервал в 10 минут.
Это значит, что мне прийдется настроить, чтобы cron.php также запускался каждые 10 минут? (насколько я понял - именно он очищает кеш)
Есть ли другие способы автоматической очистки кеша?
Например, при обращении анонимного пользователя проверяется время создания кеша и если оно старше установленного времени - кеш обновляется.
Тогда не надо будет cron запускать каждые 10 минут.
Или запуск cron каждые 10 минут не повлияют на быстродействия сайта?
Буду рад любым советам!
Комментарии
Задал этот вопрос здесь (http://drupal.org/node/243286) - посмотрим , что ответят "американские товарищи"
http://setegnom.com/node/597
Этот код очистит таблицы cache, cache_filter, cache_menu, cache_page.
Пример кода я нашел - главная задача чтобы он выполнялся автоматически при каком-нибудь событии, но не по cron!
Делаешь блок и когда нужно очистить его активируешь
друпаловский вызов cache_clear_all + имя таблицы кеша.
кеш не нужно очищать - если он работает неправильно - надо баг репорт на drupal.org писать
Кэш очищается автоматом, и не в cron.php, а самим API (фунцией cache_get).
Наверное я плохо объяснил, попробую еще раз.
Как я понял кеш обновляется путем выполнения cron.php - если его запускать раз в день то и кеш раз в день будет обновляться.
Правильно?
Если да, то тогда, чтобы кеш обновлялся каждые 10 минут, надо cron.php на выполнение ставить тоже каждые 10 минут!
Вопрос - как другим способом обновить кеш автоматически!
Как вариант я предложил - при каждом заходе анонимного пользователяя обновлять кеш если он устарел, а не дожидаться когда кеш обновиться вызовом cron.php.
Как это сделать?
Как я понял кеш обновляется путем выполнения cron.php - если его запускать раз в день то и кеш раз в день будет обновляться.
Правильно?
нет не правильно - как в друпале не знаю - но в нормальных CMS кеш обновляется только если изменилось значение первоисточника, а иначе зачем тогда кеш??? только лишняя нагрузка на его обслуживание - например на сайте 5000 страничек и на каждую заходят один раз в час, а кеш очищается раз в 10 минут - тогда вероятность что страничка будет запрошена из кеша повторно - просто нулевая!
есть разные концепты кеширования если на то пошло...
если у вас идет обновление страниц 10-100 раз в секунду каким нить из пользователей? Ы?
я все понимаю но на самом деле кешировать есть смысл но можно например чистить кеш с определенной вероятность в 1-10% как это например zend framework позволяет, скомбинировав это с максимальным временем жизни...
ТОПИКСТАРТЕР, тебе можт свой механизм работы кеша нужен? ну так перепеши его
оба поняли неправильно
1) кэш очищается без участия крона! столько этим паритесь... уже бы могли бы сами проверить - включите кэш, поставьте время 1 мин, измените какую-нибудь ноду и посмотрите когда она изменится у анонима.
2) если изменить ноду, то кэш страниц автоматом при этом не очищается (это можно реализовать самому, если хочется)
нужен не свой - а нужен такой что бы действительно снижало нагрузку а не для вида
У меня на главной странице (http://ww.interesno.name) выводится список материалов с кол-вом просмотров и рейтингом.
Если я включаю кеш и голосую за статью из-под авторизированного пользователя, то аноним на главной странице этих изменений не увидит, пока не сработает крон.
Отсюда я сделал вывод, что кеш обновляется именно по крону.
Также на главной странице есть блок со списком недавно прочитанных статей, он тоже для анонима обновляется только после запуска крона.
Ради эксперимента поставил крон каждые 10 минут - кеш обновлялся нормально.
Сейчас я кеш отключил на сайте - но хочу включить, т.к. он судя по сообщениям в форуме снижает нагрузку на сервер при просмотре сайта анонимами.
Да чё вы привязались к этому крону.... у меня сайты без крона есть и с кэшем и всё обновляется. Сами функции, которые работают с кэшем (сохраняют/извлекают данные) ответственны за очистку кэша. Вот кусок:
<?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);
}
...
?>
За код спасибо - а как его автоматически выполнять по событию (например после добавления коммента или прочтения статьи)?
как всё запущено) это код из исходников Drupal... это уже реализовано!
Может и реализовано - вот только у меня не работает!
Буду пока без кеша сайт использовать
Только что протестировал опять: сайт на drupal 6, без крона, врубаю кэш на 1 минуту, гружу главную страницу в IE анонимом, меняю в файрфоксе одну новость, обновляю страницу в IE - текст старый, жду 1 минуту, обновляю - текст новый.
почему крон в ядро не включат? почему на каждый чих надо отдельный модуль - просто издевательство какое-то... такое впечатление что друпал делал один умный и один тупой...
почему крон в ядро не включат?
ниасилил
почему на каждый чих надо отдельный модуль
Вы можете представить cms, в которой ВСЁ включено и всё решаемо кликами мышкой?
по другому - покажите например еще такую странную CMS в которой что бы сделать заголовок статьи надо было ставить отдельный модуль )))
А зачем вам заголовки длиннее 128 символов? неужели редактору тяжело напряч мозг и сделать заголовок лаконичным?
мне кажется, я понял в чём дело.
Eugef, вы наверно используете модуль Boost для кеширования страниц сайта.
Тогда всё понятно. У меня тоже стоит этот модуль и обновление проиходит только в случае запуска крона, либо путем удаления созданных модулем статичных html страничек.
С кешем на MySQL таких проблем нет, но потребовался именно кеш на файлах в моём случае.
Столкнулся с аналогичной проблемой - кэш почему-то автоматом не очищается (друпал 6, модули кэширования стандратные). Жму кнопку очистить кэш - все ок.
И у меня такая же баня! Причём вот что странно - у меня сайт может открываться и с www и без него. Так вот, на главной странице с www кэш обновляется, а если главную без www вызывать - нет! Что за шляпа такая?