Кэширование конфигурации сайта

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

Чаще всего нам приходится хранить настройки в базе данных в таком виде:
+-------------------------+
| ключ  |  значение       |
|-------------------------|
| 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