Кеширование в PHP. Memcache
Сегодня я расскажу о кешировании при помощи MemCache в PHP. Для начала узнаем что такое MemCache (надеюсь вы знаете что такое PHP, иначе эта статья не для Вас).
Memcached (читается мемкэ́шт) — алгоритм кэширования различных объектов в оперативной памяти. Позволяет, используя специальное API (для Perl, PHP, Python, Java и др.), сохранить в ОЗУ блок данных, сопоставленный с определённым символьным ключом.
Сервер memcached был разработан для сайта LiveJournal, имеющего более миллиона посетителей в сутки. Его применение снизило загрузку серверов баз данных в разы.
В API memcached есть только базовые функции: выбор сервера, установка и разрыв соединения, добавление, удаление, обновление и получение объекта. Для каждого объекта устанавливается время жизни, от 1 секунды до бесконечности. При переполнении памяти более старые объекты автоматически удаляются. Для PHP также есть уже готовые библиотеки PECL для работы с memcached, которые дают дополнительную функциональность.
Установка memcache под Windows
- Скачиваем сервер memcached (memcached-1.2.1-win32.zip)
- Распаковываем полученный архив на диск, например, в c:\memcache\
- Далее запускаем из командной строки: c:\memcache\memcached.exe -d install, тем самым устанавливая memcached как сервис.
- Теперь, осталось только запустить этот сервис: c:\memcache\memcached.exe -d start
- Все, memcache установнен на вашей машине и уже работает. Список всех доступных команд получаем так: c:\memcache\memcached.exe -h
Установка модуля для PHP (опять же под Windows)
Здесь тоже все предельно просто.
- Скачиваем расширение для установленной у вас версии PHP
- Копируем полученный файл php_memcache.dll в директорию расширений для PHP. Например, у меня это C:\server\usr\local\php5\ext\
- Добавляем в файл php.ini строку extension = php_memcache.dll, в раздел Dynamic Extensions.
- Перезапускаем сервер. Все, memcache установлен! Данный факт можно проверить при помощи функции phpinfo();
Установка под Linux
А линуксоиды и сами справятся с установкой. Один совет, устанавливайте из репозитария – меньше гемороя будет.
Например, для Debian(Ubuntu):
-
apt-get install memcached libmemcache0 php5-memcache
и будет вам счастье.
Создание класса
Подготовительный этап окончен, теперь приступаем к программированию. Напишем мы класс для работы с memcached. Вот сам код:
-
<?php
-
-
class CACHE_MemCache {
-
private $memcache;
-
private $timeLife;
-
private $compress;
-
-
/**
-
*
-
* @param string $host – хост сервера memcached
-
* @param int $port – порт сервера memcached
-
* @param int $compress – [0,1], сжимать или нет данные перед
-
* помещением в память
-
*/
-
public function __construct($host, $port = 11211, $compress = 0)
-
{
-
$this->memcache = new Memcache;
-
$this->memcache->connect($host, $port);
-
$this->compress = ($compress) ? MEMCACHE_COMPRESSED : 0;
-
}
-
-
public function load($valueID, $timeLife)
-
{
-
$this->timeLife = $timeLife;
-
return $this->memcache->get($valueID);
-
}
-
-
public function save($valueID, $value)
-
{
-
return $this->memcache->set($valueID, $value, $this->compress, $this->timeLife);
-
}
-
-
public function delete($valueID)
-
{
-
$this->memcache->delete($valueID);
-
}
-
-
public function __destruct()
-
{
-
$this->memcache->close();
-
}
-
}
-
-
?>
Честно говоря обьяснять то и нечего, но чуток поясню.
-
public function __construct($host, $port = 11211, $compress = 0)
Создает обьект по хосту, порту ($host, $port) а так же указывает нужно нам сжатие или нет.
-
public function load($valueID, $timeLife)
Пробует загрузить данные по ключу $valueID с интервалом жизни $timeLife (в секундах). Если не получится – вернет false.
-
public function save($valueID, $value)
Сохранение данных $value по ключу $valueID
-
public function delete($valueID)
Удаление данных по ключу $valueID
-
public function __destruct()
Деструктор обьекта, закрывает подключение к memcached серверу.
Использование класса
Все. Теперь на уже настроенной машине пишем можем тестировать наш класс
-
$cache = new CACHE_MemCache(’127.0.0.1′, 11211);
-
-
if ($data = $cache->load(‘key_data’, 60*60)){
-
return $data;
-
} else {
-
//тут мы берем данные или из бази (или от куда нам надо)
-
// $data пришла
-
//сохраняем в мемкеш, поскольку он оказался уже чист
-
$cache->save(‘key_data’, $data);
-
return $data;
-
}
Вот и все. Если данные по ключу key_data сохранились (хранятся час в нашем случае), то мы просто возращаем их, иначе – обращаемся к базе данных (или файлу, где они хранятся), записываем данные по ключу в memcache и возращаем данные.
Удачи в программировании!!!
Аффтар, пеши исчо!
(так тебя там спамят? =)) )
по теме:
мемкеш рулит))
ты б тогда уже примеры написал не только для пхп )))
Знакомся – http://akismet.com/. Надеюсь поможет.