На страницах этого блога уже было описано применение технологии memcache для кеширования веб страниц целиком. действительно, это очень удобная технология позволяет делать это очень быстро и надежно, при этом нет необходимости держать огромную папку закешированного содержимого. Все лежит в оперативной памяти.

Конечно, если памяти доступной для этого расширения не достаточно, то тут ничего не сделаешь. Но для выделенных сервером, как было в моем случае, это не проблема.

В этой статье я расскажу, как закешировать sql запросы к базе данных. 

В любой нормальной системе, будь то CMS или фреймворк, есть срипт, который отвечает за запросы к базе данных. Мало кто из программистов в наше время пишет 

mysql_query('select * from tablename')

всегда есть некая прослойка. Если ее нет, то ее не сложно написать. В этой статье я буду ускорять CMS Joomla и при этом буду использовать свою   прослойку uno, которая в свою очередь является прослойкой над Joomla прослойкой над PDO интерфейсом. Вот такие хитросплетения. 

В uno есть несколько методов для выборки данных: getRows,getRows,count, getRowsBySQL,exists,getRowsBySQL

Вот их и нужно кешировать. Для этого в каждый метод, необходимо добавить параметр: $usecache = false. Далее, напишу, как это работает на примере только getRow. Предполагается, что у вас уже есть класс для работы с memcahe

static public function getRow($table,$conditions=false,$colums=array('*'),$order = false,$offset = 0, $usecache = false){
	$key = md5(serialize(array($table,$conditions,$colums,$order,$offset)));
	if( $usecache and $result = mem::gi()->get($key))
		return $result;
	$result = self::query($table,$conditions,$colums,$order,1,$offset)->loadAssoc();
	if( $usecache!==false ){
		mem::gi()->set($key,$result,$usecache);
	}	
	return $result;
}

 При использовании метода, в параметр   $usecache, нужно подать количество секунд для хранения данных в memcache, по истечении которых, кеш нужно будет обновить. 

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

Но для динамичных порталов, в которых такое кеширование и имеет смысл делать, нужно предусмотреть обновление кеша. 

К примеру, пользователь зарегистрировался. После этого, список ранее закешированных пользователей нужно обновить. Для этого в $usememcache нужно подать 0. Тогда кеш затрется. 

Рассказать друзьям

Добавить комментарий


Защитный код
Обновить

Комментарии   

0
Sfera1
# Sfera1 03.03.2015 00:07
Чудно написано, но только вообще ничего не понятно.
По этому и не нужно.