- Подробности
-
Категория: PHP. Базы данных
Кеширование и ваши запросы к базе данных
Если у вас большая посещаемость на сайте, то значит, множество людей читают ваши статьи (это хорошо). Это приводит к тому, что к базе идёт огромное количество запросов (это не очень хорошо).
И что же мы будем с этим делать? Лучший способ — это кеширование результатов, которые достаются из базы. Таким образом, когда первый пользователь откроет статью, она извлечётся из базы, а вот в последующие разы она будет показываться из кэша. Эта техника позволит MySQL серверу немного отдохнуть или сконцентрировать свою мощь на другие дела.
Существует большое количество кэш-механизмов, но мы создадим свой. В большинстве случаев, его будет достаточно.
Создадим специальный класс:
03 |
function read( $fileName ) { |
04 |
$fileName = '/path/to/cache/folder' . $fileName ; |
05 |
if ( file_exists ( $fileName )) { |
06 |
$handle = fopen ( $fileName , 'rb' ); |
07 |
$variable = fread ( $handle , filesize ( $fileName )); |
09 |
return unserialize( $variable ); |
15 |
function write( $fileName , $variable ) { |
16 |
$fileName = '/path/to/cache/folder' . $fileName ; |
17 |
$handle = fopen ( $fileName , 'a' ); |
18 |
fwrite( $handle , serialize( $variable )); |
22 |
function delete ( $fileName ) { |
23 |
$fileName = '/path/to/cache/folder' . $fileName ; |
Сохраните этот код в файле cache.php
Код довольно-таки прост, поэтому я не буду объяснять его работу. Разве что, отмечу, что мы используем функции serialize и unserialize, которые превращают любой объект в строку и наоборот.
Вот как мы можем использовать наш класс:
02 |
require_once ( 'cache.php' ); |
06 |
$data = $cache ->read( 'test_17.tmp' ); |
09 |
$sql = "SELECT image, user_id, content FROM table WHERE id = 17" ; |
10 |
$data = $db ->select_list( $sql ); |
11 |
$cache ->write( 'test_17.tmp' , $data ); |
14 |
foreach ( $data as $row ) { |
Этот код позволит значительно сократить количество запросов к базе данных. Но тут есть нюанс! При любом изменении в статье, необходимо сбросить кэш (удалить его) для того, чтобы создался новый. Для обновления можете использовать этот код:
1 |
require_once ( 'cache.php' ); |
4 |
$data = 'some array for updating' ; |
5 |
$db ->update_record( 'table' , $data ); |
6 |
$cache -> delete ( 'test_17.tmp' ); |
Когда вы удалите кэш, то новая версия статьи появится на сайте. И всё будет хорошо!
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.codeforest.net/cache-for-your-database-queries
Перевел: Станислав Протасевич