На страницах этого блога уже было описано применение технологии 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. Тогда кеш затрется.
Комментарии
По этому и не нужно.