Правильно ли я построил простое кеширование на стороне сервера?
У меня долго грузится страница. Очень много данных надо запросить и обработать в функции. Решил кешировать. Вопрос - правильно ли я сделал. Раньше не решал таких задач поэтому нужен грамотный совет.
Я решил создать отдельный файл в который записываю результат обработки данных - в виде массива. Теперь остается только считать этот массив, проблема решена и страничка грузится моментально.
Но есть вопрос - правелен ли такой метод. И ещё - как быть если мне надо каждый час сбрасывать кеш? Удалять файл по крону, или можно как то проверять время жизни файла, или как то периодически очищать его. Немного непонятен момент. Спасибо всем кто поможет.
Можно перестраивать по крону.
Проверить время жизни, можно получив дату/время изменения файла с помощью php.net/manual/ru/function.filemtime.php и сравнив с текущим.
Кэш, как я понял, нужен одному PHP-скрипту. Тот должен проверять время создания файла, если оно меньше часа назад - использовать кэш, если больше - перестраивать. Зачем тут крон?
Adamos Затем, что ресурсоёмкие операции куда лучше запускать через php-cli, а не в контексте веб сервера, и cron тут воплне удобен, чтобы не конкурентно, и без лишних ограничений на время выполнения запроса, перестроить кеш если его надо перестраивать через определённые промежутки времени.
Ну, вы же понимаете, что это не общее правило, а один из вариантов решения, для которого должны быть основания.
Погадаем на гуще. ТС колхозит кэш на коленке, при этом, скорее всего, просто выполняет неоптимальные выборки, из-за которых работа скрипта занимает слишком много времени. Вместо оптимизации кода он подпирает его костылем кэша. При этом вместо инвалидации кэша по изменениям берется - похоже, с потолка - время жизни в час. Логично предположить, что посещаемость у него никакая, и крон, выполняющийся каждый час, может просто работать впустую, поскольку кэш востребован не так часто...
В общем, предметный разбор может показать и вашу правоту, и мою, и вовсе неприменимость ни того, ни другого.
Adamos А чем вы предлагаете запускать тот скрипт, который вы упомянули выше, если не кроном?
Иной логики вы не предложили, и если речь о запуске этого процесса в очередном пользовательском запросе, то это плохая идея - зачем этот запрос задерживать и заставлять пользователя ждать? И, к тому же, надо городить блокировку, чтобы одновременные запросы не запустили бы параллельные процессы перестроения кеша, что явно лишнее усложнение. Куда лучше лишний раз выполнить в фоне эту работу, даже если визитов между перестроением кеша не будет, в конце концов...
В общем, никакого гадания, запустить его в кроне при регулярном обновлении однозначно удачная идея.
Борис Сёмов, если кэш действительно нужен, часто используется и содержит некритичные данные (от неправильности которых ничего страшного не произойдет) - да, скорее всего, предложенный вами вариант будет правильным.