Кэширование конфигурации сайта
Статью писал для своего сайта, но по некоторым причинам решил все свои статьи перезалить сюда (что бы не утерять)!
Чаще всего нам приходится хранить настройки в базе данных в таком виде:
+-------------------------+
| ключ | значение |
|-------------------------|
| 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
URL:
https://visavi.net/articles/367