Эффективная работа кеша

#
Эффективная работа кеша
Дано: HostCMS, редакция Бизнес, 9 сайтов в системе.
Включен модуль кеширования.

Вопрос первый:

И у некоторых кешей заполненность превышает 100%, где-то не сильно (например Все группы Интернет-магазины (в file) - 105%) а где-то - на пару порядков (например Все товары Интернет-магазины (в file) 4030%)

Вопрос - насколько допустимо такое переполнение?

В "Руководстве по интеграции" дана следующая рекомендация по настройке кеша:
$GLOBALS['CACHE_CONFIG'][ 'ИМЯ']['block'] — максимальное число элементов в кэше.
Значение данного параметра подбирается опытным путем с учетом расчета числа изменений элементов выбранного кэша за период его актуальности.

А не могли бы сформулировать какие-то более конкретные критерии для расчета данного параметра? Не с потолка же брать его значения при подборе.


Вопрос второй.

в файле .htaccess в корне cms есть следующие строки:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{HTTP_COOKIE} !^.*PHPSESSID=.*$
RewriteCond %{DOCUMENT_ROOT}/cache_html/%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING}index.html -f
RewriteRule ^(.*)$ /cache_html/%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING}index.html


При этом, как я понимаю, происходит сначала запуск hostcms и только потом запрос перенаправляется на закешированную в статичный файл страницу. Или я не прав?
Если я прав, то какую нагрузку на сервер создает система в таком случае - стандартную, или сниженную?
И корректно ли все работает при использовании массового редиректера, предложенного мною здесь http://hostcms.ru/forums/22/4153/
Заказов не беру. Консультирую редко.
Модератор
#
Re: Эффективная работа кеша
Kotoff писал(а):
Вопрос — насколько допустимо такое переполнение?

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

Kotoff писал(а):
При этом, как я понимаю, происходит сначала запуск hostcms и только потом запрос перенаправляется на закешированную в статичный файл страницу. Или я не прав?

Не ясно о каком из двух видов кэша Вы спрашиваете. Просто кэш в системе обрабатывается именно системой при генерации файла, т.е. управление передается PHP и далее упрощенная сборка страницы. Если же о статичном кэше (последний блок), то он работает без участия PHP при отдаче страницы.

Kotoff писал(а):
И корректно ли все работает при использовании массового редиректера, предложенного мною здесь

К сожалению не могу сказать, если редирект, то естественно он не кэшируется, а вот то, на что редирект вполне может кэшироваться.
#
Re: Эффективная работа кеша
HostCMS писал(а):
Кэш представляет собой сообщество файлов, «переполнение» в данном случае является просто превышением индикативно-указанного значения в параметрах кэша. Вы можете их изменять.
Тогда я нахожу некоторое противоречие между вашими словами и тем что написано в руководстве:

Цитата:
$GLOBALS['CACHE_CONFIG'][ 'ИМЯ']['block'] — максимальное число элементов в кэше.
Значение данного параметра подбирается опытным путем с учетом расчета числа изменений элементов выбранного кэша за период его актуальности.

$GLOBALS['CACHE_CONFIG'][ 'ИМЯ']['block_size'] — размер элемента кэша в байтах.
Максимальный размер кэша будет равен максимальному числу элементов кэша, умноженному на размер блока.


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

Из ваших же слов я делаю вывод что максимальный размер кеша ничем не ограничивается, и в случае если число элементов в кеше превышает максимальное число указанное в настройках, то указанное в настройках игнорируется, а фактический кеш получается таким каким он получается. Тогда какой смысл в подборе значения block, если система все равно создаст столько блоков, сколько ей надо?

HostCMS писал(а):
Не ясно о каком из двух видов кэша Вы спрашиваете.
Во втором вопросе я спрашивал уже про статичный кеш, то есть о том, что в Руководстве пользователя называется "Зеркалированием".

HostCMS писал(а):
Если же о статичном кэше (последний блок), то он работает без участия PHP при отдаче страницы.
а тогда каким образом осуществляется контроль актуальности статичного кеша?
Я предполагал, что пользователю отдается статичная закешированная страничка, а потом ядро системы проверяет не устарела ли закешированный файл для данной страницы и удаялет файл если он устарел.
Или это не так и кеш статичных страниц надо чистить руками? Тогда как с этим соотносится число, определяющее вероятность очистки кеша в разделе "Кеширование" настроек сайта?
Заказов не беру. Консультирую редко.
Модератор
#
Re: Эффективная работа кеша
Kotoff,
Спасибо за замечание, внесем изменение в документацию:Цитата:
$GLOBALS['CACHE_CONFIG'][ 'ИМЯ']['block'] — предполагаемое максимальное число элементов в кэше (индикативное значение, не влияющее на реальный размер кэша).
$GLOBALS['CACHE_CONFIG'][ 'ИМЯ']['block_size'] — максимальный размер элемента кэша, указывается в байтах.

Kotoff писал(а):
Во втором вопросе я спрашивал уже про статичный кеш, то есть о том, что в Руководстве пользователя называется «Зеркалированием».

В руководстве идет ссылка на вкладку раздела "Сайты", там указано следующее: Цитата:
Число, определяющее вероятность очистки кэша - Определяет вероятность, с которой будет происходить очистка кэша в статичных файлах для текущего сайта. Например, при указании числа 10000 очистка кэша будет происходить раз в 10 000 обращений к сайту. Если указан 0, то автоматическая очистка кэша в статичных файлах не будет использоваться.


Kotoff писал(а):
Я предполагал, что пользователю отдается статичная закешированная страничка, а потом ядро системы проверяет не устарела ли закешированный файл для данной страницы и удаялет файл если он устарел.

В таком случае в работу включался бы PHP и смысл такого кэширования был бы потерян. Для автоматической очистки указывается вероятность, описание дано выше.
#
Re: Эффективная работа кеша
HostCMS, определение "числа определяющего вероятность очистки кэша" я читал. Возможно ранее я его неправильно понимал - я считал что при указании числа 10000, статичный кеш _для_конкретной_страницы_, например для site.ru/news/item1/ будет очищаться каждый раз, когда _эту_ страницу посмотрят 10000 раз, и такая очистка будеть касаться статичной версии _только_этой_ страницы.

Но вероятно на самом деле, имеются в виду 10000 обращений _к_сайту_в_целом_, к любым его страницам, а очистка кеша происходит _для_всех_ закешированных страниц этого сайта?

Тогда возникает следующий вопрос: если php запускается только при отдаче НЕзакешированных страниц, то стало быть и счетчик обращений тоже инкрементируется только при просмотре НЕзакешированных страниц? И если мы закешируем в статичные файлы абсолютно _весь_ сайт, то счетчик перестанет инкрементироваться и автоматическая очистка кеша перестанет работать?
Заказов не беру. Консультирую редко.
Модератор
#
Re: Эффективная работа кеша
Kotoff писал(а):
Но вероятно на самом деле, имеются в виду 10000 обращений _к_сайту_в_целом_, к любым его страницам, а очистка кеша происходит _для_всех_ закешированных страниц этого сайта?

Верно, речь идет о среднем числе обращений, при которых произойдет очистка всего статичного кэша для всех доменов сайта.

Kotoff писал(а):
Тогда возникает следующий вопрос: если php запускается только при отдаче НЕзакешированных страниц, то стало быть и счетчик обращений тоже инкрементируется только при просмотре НЕзакешированных страниц? И если мы закешируем в статичные файлы абсолютно _весь_ сайт, то счетчик перестанет инкрементироваться и автоматическая очистка кеша перестанет работать?

Верно, однако стат. кэш работает не для всех страниц, также не работает для авторизированных пользователей, поэтому такая ситуация крайне маловероятна. Если же сайт действительно превращается в чистую статику, то очистить кэш можно через центр администрирования.
#
Re: Эффективная работа кеша
HostCMS писал(а):
В таком случае в работу включался бы PHP и смысл такого кэширования был бы потерян.

Меня все-таки смутили два последовательных редиректа в .htaccess которые я процитировал выше, в самом первом посте. Поэтому я решил провести небольшой эксперимент.
Открыл в редакторе основной шаблон сайта, и добавил в его конец вот такой фрагмент кода:
// получим запрашиваемый url
$uri = $_SERVER['REQUEST_URI'];

// получим путь к текущей папке
$script_dir = dirname(__file__) . '/';

$file = 'log2.txt';
$filename = $_SERVER['DOCUMENT_ROOT'] . '/cache_html/' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING'] . 'index.html';
$str = $uri . "\t" . $filename . "\n";
if (file_exists($filename))
   file_put_contents($script_dir . $file,  $str, FILE_APPEND);
echo $script_dir . $file;

Как легко заметить, код вычисляет путь к кешированному файлу текущей страницы, потом проверяет существование этого файла, и если он существует, то в файл log2.txt дописывается строка, содержащая текущий url сайта и путь к файлу кеша.

Исходя из описанного вами выше, файл log2.txt при таком коде должен всегда оставаться пустым, т.к. запись в файл происходит только когда файл существует, а при существующем файле php не запускается.
Однако ж нет, в файл стали писаться строки, содержащие пути к существующим файлам кеша.
Стало быть, php не только _запускается_ при наличии кешированного файла, но еще и честно отрабатывает всю генерацию страницы до конца!

При этом, поскольку в htaccess index.php упомянут первым, то именно он и отдает страничку пользователю, а должен бы отдаваться Апачем статический файл из кеша.

Так а что же надо сделать, чтобы php не запускался при наличии кешированной страницы?
Версия HostCMS - 5.9.12
Заказов не беру. Консультирую редко.
Модератор
#
Re: Эффективная работа кеша
Kotoff писал(а):
Стало быть, php не только _запускается_ при наличии кешированного файла, но еще и честно отрабатывает всю генерацию страницы до конца!

Прочтите внимательно мои сообщения и посмотрите последние правила реврайта - как только запущена сессия, статичный кэш не будет работать! Также система не будет писать в статичный кэш по некоторым причинам, если посчитает что пользователь авторизован или пользовались средства индивидуализации!
#
Re: Эффективная работа кеша
HostCMS писал(а):
как только запущена сессия, статичный кэш не будет работать!
Тогда следующий вопрос.
У меня на сайте магазин привязан к корню сайта. Как только я захожу на сайт, у меня в куках появляется PHPSESSID и тогда в соответствии с правилами реврайта получается что статичный кеш для сайта не работает никогда?
Заказов не беру. Консультирую редко.
Авторизация