2011-01-20 2 views
1

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

выход кэша HTML
Cache некоторые переменные

это было бы здорово, чтобы реализовать более одного метода кэширования, поэтому я их, все имеющиеся там (я делать кэширование в настоящее время с файлами, любые другие идеи ?)

+2

Что вы ищете для кеширования? – polarblau

+0

Под «кешем» вы подразумеваете просто кеширование обслуживаемого контента или использование таких систем, как memcached и т. Д.? (Пожалуйста, уточните свой вопрос, чтобы добавить ясность.) –

+0

Выход HTML и некоторые переменные иногда –

ответ

3

Большинство PHP-сборников не имеют встроенного механизма кэширования. Существуют расширения, которые могут позаботиться о кешировании для вас.

Посмотри APC или MemCache

+0

Не подходит для сгенерированного HTML-кода из mysql-запросов, я думаю? –

+0

Почему бы и нет? Вы можете легко сохранить вычисленный HTML в кеш APC для дальнейшего использования. Разве это не то, что вам нужно? –

0

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

Ну, это основной вид. Конечно, есть способы реализовать кеширование, вроде - и несколько пакетов и расширений делают это (например, Zend Extensions и APC). Однако вы должны очень внимательно посмотреть, действительно ли это повышает производительность. Другие методы, такие как memcache (для результатов DB) или переход с PHP на, например, Java часто дает лучшие результаты.

Вы можете хранить переменные в $ _SESSION, но вы не должны хранить там больше HTML.

Проверьте, что вы на самом деле пытаетесь сделать. «Byteecode cacheing» (то есть, сохранение времени разбора PHP) должно выполняться исполняемым файлом исполняемого файла PHP. Для кэширования запросов (SQL) запросов/пар ответов есть memcache. Cacheing HTML output can be done, но часто это не очень хорошая идея.

См. Также an earlier answer on a similar question.

+0

Ну, строго говоря, глобальный $ _SESSION - это то, что можно использовать для нескольких запросов от одного и того же клиента, но memcache или APC по-прежнему остаются доступными, если вы не хотите полагаться на базу данных или файловую систему. –

+0

Да, я знаю, и именно поэтому я написал «основной взгляд». Конечно, есть несколько способов обойти это, и вы можете, например, serialize() в файл и прочитать его обратно, сохраняя имя файла в $ _SESSION и так далее. Однако этот подход может быть * медленнее *, а не быстрее, в зависимости от того, что вы делаете. Специализированные расширения могут делать хорошую работу в соответствующих областях, но прежде чем выбирать кого-либо из них наугад, важно проверить, каково фактическое требование/цель. – foo

+0

Я хочу дать возможность администратора сайта выбрать метод кеша, который ему нравится, поэтому мне просто нужны все доступные методы кэширования в php, которые все –

0

Если вы используете фреймворк, то большинство из них приходят с помощью какой-либо формы кеширования, которую вы можете использовать, например. Zend_Cache Zend Framework. Если вы не используете фреймворк, то можно использовать APC или Memcache в качестве Pelle ten Cate. Правильный подход к использованию в вашей ситуации зависит, однако, есть ли у вас ваш сайт или приложение, работающее на сервере, а также какая информация в кеше должна быть разделена между этими серверами? (если да, то что-то вроде memcache - ваш ответ или, может быть, база данных или распределенное решение NoSQL, если вы чувствуете себя храбрым). Если код работает только на одном сервере, вы можете попробовать что-то простое, например, сериализовать свои переменные и записать их на диск, а затем после каждого запроса посмотреть, существуют ли файлы, если они есть, открыть его и неэтериализовать строку в необходимую вам переменную. Это хотя стоит, только если это займет много времени, чтобы создать Название переменной, обычно, (например, больше, чем это было бы открыть, прочитать, десериализируются файл на диске)

Для HTML кэширования вы вообще собираетесь получите максимальный пробег от использования прокси-сервера, такого как Varnish или Squid, чтобы сделать это за вас, но я понимаю, что это не может быть для вас вариантом. Если это не так, вы можете использовать описанный выше подход к записи на диск и сохранять куски HTML в файлы. посмотрите в руководстве PHP для ob_start и его друзей.

+0

спасибо! один вопрос, мои данные, которые я хочу сохранить, извлекаются из базы данных, поэтому я хочу уменьшить запросы, поэтому я хочу кэшировать результаты (где результаты - это сгенерированная страница HTML, содержащая данные базы данных, а также нить форума или что-то похожее), поэтому единственный способ сделать это - сохранить вывод HTML в файл, а не использовать базу данных снова и снова? или есть другой способ, чем сохранение вывода в файл? memcache будет медленным, я думаю, я использую один сервер. –

+0

, если вы используете только один сервер, тогда нет реальной точки в использовании memcache. Что замедляет ваши запросы к базе данных? это то, что вам приходится делать много из них на странице, или что они сложны и медленны? В любом случае вы все равно можете сохранить кешированный вывод в DB, ​​поскольку запрос на доступ к кешированному элементу будет очень простым и быстрым ... SELECT content FROM cache_table WHERE id = 2; –

Смежные вопросы