Кэширование с помощью PHP для снятия стресса с MySQL

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

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

Я знаю, что Joomla и phpBB и другие интенсивные приложения MySQL используют кеширование, чтобы не делать столько запросов MySQL, поэтому это заставило меня задуматься.

EDIT – Забыл упомянуть, что я на Windows / IIS 7.0

Вы должны взглянуть на memchached : получить доступ к нему через memcache PHP или memcached

Модуль Memcache обеспечивает удобный процедурный и объектно-ориентированный интерфейс для memcached, высокоэффективного демона кэширования, который был специально разработан для снижения загрузки базы данных в динамических веб-приложениях.

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

Memcached был разработан для повышения скорости LiveJournal.com, сайта, который уже делает 20 миллионов + динамических просмотров страниц в день для 1 миллиона пользователей с кучей веб-серверов и связью серверов баз данных. Введение memcached значительно снизило загрузку базы данных.

Заметка
В PHP есть две (2) клиентские библиотеки. Более подробно об этом можно узнать на serverfaul.com: memcache-vs-memcached, и вот сравнение

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

Базы данных не медленны по своей природе и, конечно, не медленнее, чем загружать кучу кэшированных данных из плоских файлов. Но они могут быть медленными из-за неправильного использования. Например, если один из ваших запросов на каждую страницу записывает в таблицу MyISAM или делает необработанный запрос, или один из ваших запросов является сложным и сложным. Атакуйте эти ситуации, сначала фиксируя свою схему.

Быстро и грязно, было бы так.

1. create a cachefilename for this specific url 2. check if such a file exists in the cache directory and if it is younger than n minutes 2.1 if not: 2.2 // business logic goes here => Save output eg in a variable $output 2.3 save contents of $output in cachefilename 2.4 echo $output 3. if so: 3.1 $output = file_get_contents(cachefilename) 3.2 echo $output 

Это может быть не так элегантно, как memcache или memcached, но вы можете использовать его практически везде.

Memcached отлично, но может быть немного излишним для вашего намерения. Подход к кешированию на основе файлов, подобный представленному Мартином, будет работать отлично. Существует ряд готовых кэш-библиотек на уровне файлов для PHP.