PHP

Кеширование и ваши запросы к базе данных

Если у вас большая посещаемость на сайте, то значит, множество людей читают ваши статьи (это хорошо). Это приводит к тому, что к базе идёт огромное количество запросов (это не очень хорошо).

И что же мы будем с этим делать? Лучший способ – это кеширование результатов, которые достаются из базы. Таким образом, когда первый пользователь откроет статью, она извлечётся из базы, а вот в последующие разы она будет показываться из кэша. Эта техника позволит MySQL серверу немного отдохнуть или сконцентрировать свою мощь на другие дела.

Существует большое количество кэш-механизмов, но мы создадим свой. В большинстве случаев, его будет достаточно.

Создадим специальный класс:
class Cache {
 
    function read($fileName) {
    $fileName = '/path/to/cache/folder'.$fileName;
    if (file_exists($fileName)) {
        $handle = fopen($fileName, 'rb');
        $variable = fread($handle, filesize($fileName));
        fclose($handle);
        return unserialize($variable);
    } else {
        return null;
    }
}
 
    function write($fileName,$variable) {
        $fileName = '/path/to/cache/folder'.$fileName;
        $handle = fopen($fileName, 'a');
        fwrite($handle, serialize($variable));
        fclose($handle);
    }
 
    function delete($fileName) {
        $fileName = '/path/to/cache/folder'.$fileName;
        @unlink($fileName);
    }
}

Сохраните этот код в файле cache.php

Код довольно-таки прост, поэтому я не буду объяснять его работу. Разве что, отмечу, что мы используем функции serialize и unserialize, которые превращают любой объект в строку и наоборот.

Вот как мы можем использовать наш класс:
// подключаем класс
require_once('cache.php');
// создаём объект
$cache = new Cache();
// проверяем существование кэша
$data = $cache->read('test_17.tmp'); //17 это например id статьи
// допустим, такого кэша нет. Достаём статьи из базы
if (empty($data)) {
    $sql = "SELECT image, user_id, content FROM table WHERE id = 17";
    $data = $db->select_list($sql); // просто для примера
    $cache->write('test_17.tmp', $data);
}
// дальше используем данные как всегда
foreach($data as $row) {
    ........
}

Этот код позволит значительно сократить количество запросов к базе данных. Но тут есть нюанс! При любом изменении в статье, необходимо сбросить кэш (удалить его) для того, чтобы создался новый. Для обновления можете использовать этот код:
require_once('cache.php');
$cache = new Cache();
//обновляем статью
$data = 'some array for updating';
$db->update_record('table', $data);
$cache->delete('test_17.tmp');

Когда вы удалите кэш, то новая версия статьи появится на сайте. И всё будет хорошо!
Теги:
Кеширование, запросы, база данных
Добавлено: 06 Мая 2018 18:32:51 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...