Я хотел бы создать систему кэширования PHP для своего приложения.Так как мой хостинг-провайдер не поддерживает APC или memcached, я вынужден создавать свой собственный.
Существует множество классов PHP-кеша, которые, похоже, предназначены для веб-сайтов с небольшим трафиком.Большинство из них дает сбой, когда кто-то запрашивает файл, который в данный момент обновляется.
Я покажу вам свою идею решения этой проблемы:
Предположим, что наш сайт - это блог (с 3-4 обновлениямидень) и состоит из двух основных файлов:
Обычно все обрабатывается запросами MySQL, но мы хотим сэкономить некоторые ресурсы сервера.
СИТУАЦИЯ 1: Пользователь запрашивает file.php (статья или страница)
file.php
<?php
//some code
$time = time();
//get second digit of minutes
$minutes = substr(date('i', $time), 1);
//get $result ∈ [0,599]
$result = $minutes*60 + (int)(date('s'));
//load cached version of data depending on time
if($result >= 0 && $result <= 199) {
require_once '/cache1/data.php';
}
else if($result >= 200 && $result <= 399) {
require_once '/cache2/data.php';
}
else if($result >= 400 && $result <= 599) {
require_once '/cache3/data.php';
}
//some code
?>
, где файлы /cacheX/data.php содержат те же кэшированные данные.
СИТУАЦИЯ 2: Некоторые статьи были добавлены/ удалено, администратор запускает update.php
update.php:
1) получить все статьи из базы данных
2) для всех новых статей (с момента последнего обновления) создать файлarticleID.php (с данными, которые мы хотим кешировать) и сохранить их в папке / cache0 / (overwrите, если необходимо)
3) для каждой страницы (есть страницы ceil (count ($ article) / 5)), создайте файл pageX.php (с данными, которые мы хотим кэшировать) и сохраните его в / cache0 /папка (перезаписать, если необходимо)
4) создать переменную $ result (как в file.php)
5) http://bayimg.com/CAMffAADl
6) END
Теперь мои вопросы:
A.Что вы думаете об этом решении?Вы видите какие-либо ошибки?Что бы вы добавили / изменили / удалили?
B.Что происходит, когда действительно много статей (скажем, 10000)?Это все еще эффективно?
C.Я выбрал правильное время?200 секунд лучше в этом случае?(Предположим, что размер кэшированного файла составляет 5-10 КБ)
D.Что лучше - мое решение или кеш MySQL?