Как лучше всего реализовать кеш для сайта PHP? Очевидно, что есть некоторые вещи, которые не следует кэшировать (например, поисковые запросы), но я хочу найти хорошее решение, которое позволит избежать «эффекта digg».
Я знаю, что для WordPress есть WP-Cache, но я пишу собственное решение, которое не построено на WP. Мне интересно либо написать свой собственный кеш (если он достаточно простой), либо вы могли бы указать мне на приятный, легкий фреймворк. Я не очень хорошо разбираюсь в Apache, поэтому, если бы это был фреймворк PHP, он бы подошел лучше.
Спасибо.
Du вы хотите кешировать полные страницы или только части страниц?
Я хочу кешировать полные страницы. Конечно, в системе должна быть какая-то функция «обновления», при которой, если содержимое базы данных изменится, то кешированная версия будет отражать эти изменения.






Лучше всего использовать прокси-кеш (Squid, Varnish) и обслуживать соответствующие заголовки Cache-Control / Expires вместе с ETags: см. Учебник Марка Ноттингема по кэшированию для полного описания того, как работают кеши и как вы можете получить максимальную производительность от кеширующий прокси.
Также проверьте memcached и попробуйте кэшировать там свои запросы к базе данных (или, еще лучше, предварительно обработанные фрагменты страницы).
Вы можете использовать буферизация вывода, чтобы выборочно сохранять части вашего вывода (те, которые вы хотите кэшировать) и отображать их следующему пользователю, если он не был достаточно длинным. Таким образом, вы по-прежнему визуализируете другие части страницы на лету (например, настраиваемые поля, личную информацию).
Не уверен, почему вы перешли на пониженный уровень - это вполне возможный способ сделать это.
Спасибо. Да я и сам не понимаю. Это очень полезно в нескольких ситуациях, когда другие готовые решения для кеширования не применимы.
Похоже, вы ищете фреймворк для кеширования PHP. Я рекомендую вам систему шаблонов TinyButStrong, которая поставляется с очень хорошим плагином CacheSystem. Он простой, легкий, настраиваемый (вы можете кэшировать любую часть html-файла), очень мощный ^^
Механизм шаблонов PHP Smarty (http://www.smarty.net) включает довольно продвинутую систему кеширования.
Подробности можно найти в разделе кеширования руководства Smarty: http://www.smarty.net/manual/en/caching.php
Я бы порекомендовал Memcached или БТР. Оба являются решениями для кэширования в памяти с чрезвычайно простыми API и множеством библиотек.
Проблема с этими двумя заключается в том, что вам нужно установить их на свой веб-сервер или другой сервер, если это Memcached.
Используется всеми большими парнями (Facebook, Yahoo, Mozilla)
Минусы:Медленнее, чем APC
Я бы не рекомендовал писать свои собственные, их много. Вы можете использовать кеш на диске, если вы не можете установить программное обеспечение на свой веб-сервер, но есть возможные проблемы с гонками, которые нужно решить. Один запрос может записывать в файл, а другой читает.
Фактически вы можете кэшировать поисковые запросы даже на время от нескольких секунд до минуты. Если ваша база данных не обновляется чаще, чем несколько раз в секунду, небольшая задержка будет допустимой.
Простое кеширование страниц или частей страниц - класс Pear :: CacheLite. Я также использую APC и memcache для разных целей, но другие ответы, которые я видел до сих пор, больше касаются более полных и сложных систем. Если вам просто нужно сэкономить усилия при восстановлении части страницы - Cache_lite с файловым хранилищем вполне достаточно, и его очень просто реализовать.
Проект Газель (торрент-сайт с открытым исходным кодом) предоставляет пошаговое руководство по настройке Memcached на сайте, которое вы можете легко использовать на любом другом веб-сайте, который вы, возможно, захотите настроить, который будет обрабатывать большой трафик.
Возьмите исходный код и прочтите документацию.
Ссылка на документацию и исходник мертва
Если о прокси-кеше не может быть и речи, и вы обслуживаете полные HTML-файлы, вы получите максимальную производительность, полностью обойдя PHP. Изучите, как работает WP супер кэш.
Некэшированные страницы копируются в папку кэша с такой же структурой URL-адресов, что и ваш сайт. В более поздних запросах mod_rewrite отмечает существование кешированного файла и обслуживает его. другие директивы RewriteCond используются, чтобы убедиться, что комментаторы / вошедшие в систему пользователи видят живые запросы PHP, но большинство посетителей будут обслуживаться непосредственно Apache.
Вы заинтересованы в использовании фреймворка или библиотек или просто хотите узнать, как реализовать собственное решение для кэширования?