Кэширование конфигурации сайта (Оценка: +13)

Печать / RSS-лента
Статью писал для своего сайта, но по некоторым причинам решил все свои статьи перезалить сюда (что бы не утерять)!

Чаще всего нам приходится хранить настройки в базе данных в таком виде:

+-------------------------+
| ключ | значение |
|-------------------------|
| home | http://7je.ru |
+-------------------------+

В итоге у нас выходит как минимум 30 значений!

Далее мы заносим эти значения в скрипте в массив!
Самый обоснованный вариант, это выглядет так:

<?php
$qury = mysql_query("SELECT `key`, `value` FROM `setting`;");

while ($row = mysql_fetch_array($qury, MYSQL_ASSOC)) {
$_set[$row['key']] = $row['value'];
}
?>

проверим это на оперативность при 10,000 записей!
Результат: 0.0095, 0.0144, 0.0219

В принципе так подумать, что же это за конфиги, в которых хранится 10,000 записей? но необходимо учитывать то, что у вас сидит на сайте ~1000 человек, каждый из них кликает по ссылкам периодичностью в 3 секунды.
каждый раз при генерации страницы для пользователя идет запрос в базу...
а это уже сказывается на сервере...

Я предлагаю кэшировать конфиги следующим образом:

<?php
$file = 'setting.cache.db';
$life = is_file($file) ? filemtime($file) + 43200 : 0;

if ($life < time()) {

$qury = mysql_query("SELECT `key`, `value` FROM `setting`;");

while ($row = mysql_fetch_array($qury, MYSQL_ASSOC)) {
$_set[$row['key']] = $row['value'];
}

file_put_contents($file, serialize($_set), LOCK_EX);

} else {

$_set = unserialize(file_get_contents('setting.cache.db'));

}
?>


Т.е мы проверяем когда было произведено последнее кэширование, и если это было 12 часов назад, то мы делаем запрос к бд, и записываем полученный массив в файл, или если время не истекло, то открываем файл, и заносим в переменную полученный массив.

В итоге выигрыш: 0.0019, 0.0023, 0.0037
Автор статьи: AxqpxA (16.11.11 / 20:21)
php, serialize, кэш, конфигурация
Рейтинг: +13
Просмотров: 1298
Комментарии (11) »