Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 11.06.2011, 21:36   #1
Заблокирован
 Разведчик
Аватар для Я убью:Frost:DD
 
Я убью:Frost:DD на правильном пути
Регистрация: 06.06.2011
Сообщений: 20
Популярность: 74
Сказал(а) спасибо: 65
Поблагодарили 32 раз(а) в 22 сообщениях
 
По умолчанию Кеширование и ваши запросы к базе данных

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

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

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

Создадим специальный класс:01 class Cache {
02
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));
08 fclose($handle);
09 return unserialize($variable);
10 } else {
11 return null;
12 }
13 }
14
15 function write($fileName,$variable) {
16 $fileName = '/path/to/cache/folder'.$fileName;
17 $handle = fopen($fileName, 'a');
18 fwrite($handle, serialize($variable));
19 fclose($handle);
20 }
21
22 function delete($fileName) {
23 $fileName = '/path/to/cache/folder'.$fileName;
24 @unlink($fileName);
25 }
26 }


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

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

Вот как мы можем использовать наш класс:01 // подключаем класс
02 require_once('cache.php');
03 // создаём объект
04 $cache = new Cache();
05 // проверяем существование кэша
06 $data = $cache->read('test_17.tmp'); //17 это например id статьи
07 // допустим, такого кэша нет. Достаём статьи из базы
08 if (empty($data)) {
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);
12 }
13 // дальше используем данные как всегда
14 foreach($data as $row) {
15 ........
16 }


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


Когда вы удалите кэш, то новая версия статьи появится на сайте. И всё будет хорошо!
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
ПодпольщикPB (12.06.2011), ololoshnik212 (11.06.2011)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Подсказка] SQL Запросы и т.д Dybas Общение и обсуждение, архив Lineage 2 0 10.06.2011 21:38
Sql запросы Винсент World of Warcraft 0 17.04.2010 17:15
Sql запросы. gashich Вопросы и ответы, обсуждения 2 20.03.2010 15:18

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 07:42.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net