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');

Когда вы удалите кэш, то новая версия статьи появится на сайте. И всё будет хорошо!
Добавлено: 21 Августа 2013 11:17:59 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...