Реальный PHP-кеш для приложений, размещенных на shared-серверах - PullRequest
0 голосов
/ 17 февраля 2012

Я хотел бы создать систему кэширования PHP для своего приложения.Так как мой хостинг-провайдер не поддерживает APC или memcached, я вынужден создавать свой собственный.

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

Я покажу вам свою идею решения этой проблемы:

Предположим, что наш сайт - это блог (с 3-4 обновлениямидень) и состоит из двух основных файлов:

  • pageX.php - страница со ссылками и описаниями статей

  • articleID.php - страницас запрашиваемой статьей

Обычно все обрабатывается запросами 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...