Тут будет рассмотрена установка демона Memcached на систему c Ubuntu для его использования в php. А также использование memcache во фреймворке kohana.
Memcached (Memcache) - ПО, которое позволяет кэшировать данные в оперативной памяти сервера, на котором запущен демон memcached, и устанавливать время жизни кэша.
Основная причина использования memcache - увеличение производительности сайта. Пути повышения производительности:
- кэширования страницы. После генерации страницы положить результат в кэш, например на сутки. Когда пользователи будут запрашивать страницу, то, если она есть в кэше, страница будет отдаваться из кэша. Снижается нагрузка на сервер, который тратит ресурсы для генерации страницы. Есть одно но, если страница динамичекая, то при изменении данных на странице, нужно обновлить кэш этой страницы, чтобы пользователям отдавались только актуальные данные. Если страница очень динамическая, то такое использование может не принести пользы, т.к. будут происходить постоянные перезаписи кэша.
- кэширование результатов выполнения тяжёлых запросов. Например, на титульной странице сайта выводятся несколько фоток с высоким рейтингом (рейтинг нассчитывается по по множеству параметров - просмотры, лайки, комменты и т.д.). Рационально будет после выполнения запроса получения популярных фоток закэшировать результат, например на час. За час кардинально ничего не изменится, зато вместо 500 раз тяжёлый запрос выполнится всего лишь один раз.
Для начала нужно установить службу Memcached:
sudo apt-get install memcached
По умолчанию, сервис Memcached запускается на порту 11211. Если захотите, порт можно изменить.
Установить php-расширение для работы с Memcache:
sudo apt-get install php5-memcache
Далее нужно сделать restart php, если php подключен как модуль apache то:
sudo /etc/init.d/apache2 restart
Если используете php-fpm:
sudo service php5-fpm restart
После рестарта в phpinfo() должна добавиться секция memcached:
Если секция не добавлена, то в kohana при попытке работать с memcache вылазит ошибка:
Cache_Exception [ 0 ]:
Работа с кэшем в kohana
Для работы с кэшем в kohana уже есть модуль cache. Его нужно раскомментировать в bootstrap.php.
Скопировать из модуля cache modules/cache/config/cache.php в application/classes/config/cache.php, чтобы перекрыть конфиг. В самом файле config/cache.php раскомментировать секции типов кэша, которые будем использовать.
Теперь можем использовать кэш.
Обратиться к кэшу можно из любого места в коде, но, естественно, делать это лучше из контроллера или модели. Если проект большой, то для работы с каждым ключём кэша лучше создать класс-slot. И тогда работа со слотом всегда будет в одном месте.
В общем случае использование memcache в kohana:
Cache::instance('memcache')->set('key_for_cache', $data, Date::DAY); Cache::instance('memcache')->get('key_for_cache'); // тут будет $data
Если ключ кэша не найден, то get() вернёт NULL.
Кэш будет храниться и после обновления страницы, пока что то не сломается или не истечёт время жизни кэша. Третим параметром в set() можно установить время жизни кэша.
Реальный пример:
const COUNT_LAST_USERS = 6; // кол-во последних добавленных юзеров const TIME_CACHE_LIFE = 86400; // 1 day - время жизни кэша public function getLastUsers() { $aUsers = Cache::instance('memcache')->get('lastUsers'); // берём из кэша if (!is_array($aUsers)) { // если в кэше не найдены данные (тогда $aUsers NULL) // тяжёлый sql-запрос без использования индекса $aUsers = $this->where('sex', '=', 1) ->order_by('date_added', 'desc') ->limit(self::countLastUsers) ->find_all(); Cache::instance('memcache')->set('lastUsers', $aUsers, self::TIME_CACHE_LIFE); // ложим в кэш } return $aUsers; }
При первом обращении к функции getLastUsers() данные не будут найдены в кэше и запрос пойдёт в базу, в остальных вызовах в течение суток данные будут браться из кэша.
Комментарии 0