Поиск…
замечания
Кэширование с использованием memcache
Memcache - это система кэширования распределенных объектов и использует key-value
для хранения небольших данных. Прежде чем вы начнете вызывать код Memcache
на PHP, вам нужно убедиться, что он установлен. Это можно сделать с class_exists
метода class_exists
в php. После проверки того, что модуль установлен, вы начинаете с подключения к экземпляру сервера memcache.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
Это подтвердит, что Php-драйверы Memcache установлены и подключаются к экземпляру сервера memcache, запущенному на localhost.
Memcache работает как демон и называется memcached
В приведенном выше примере мы подключались только к одному экземпляру, но вы также можете подключаться к нескольким серверам, используя
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Обратите внимание, что в этом случае, в отличие от connect, не будет никакого активного соединения, пока вы не попытаетесь сохранить или получить значение.
При кэшировании необходимо выполнить три важные операции
- Сохранение данных: добавление новых данных на сервер memcached
- Получение данных: выборка данных с сервера memcached
- Удаление данных: удаление уже существующих данных с сервера memcached
Хранить данные
$cache
или memcached class object имеет метод set
который принимает ключ, значение и время, чтобы сохранить значение для (ttl).
$cache->set($key, $value, 0, $ttl);
Здесь $ ttl или время для жизни - это время в секундах, которое вы хотите, чтобы memcache хранил пару на сервере.
Получить данные
$cache
или memcached класс имеет метод get
который принимает ключ и возвращает соответствующее значение.
$value = $cache->get($key);
В случае, если для ключа нет значения, оно вернет значение null
Удалить данные
Иногда вам может понадобиться удалить некоторое значение кеша. $cache
или memcache имеет метод delete
который можно использовать для него.
$cache->delete($key);
Малый сценарий кэширования
Давайте предположим простой блог. Он будет иметь несколько сообщений на целевой странице, которые получаются из базы данных при каждой загрузке страницы. Чтобы уменьшить sql-запросы, мы можем использовать memcached для кэширования сообщений. Вот очень маленькая реализация
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
if(($data = $cache->get('posts')) != null) {
// Cache hit
// Render from cache
} else {
// Cache miss
// Query database and save results to database
// Assuming $posts is array of posts retrieved from database
$cache->set('posts', $posts,0,$ttl);
}
}else {
die("Error while connecting to cache server");
}
Кэш с использованием кэша APC
Альтернативный кэш PHP (APC) - это бесплатный и открытый кеш-код для PHP. Его цель - предоставить бесплатную, открытую и надежную структуру для кэширования и оптимизации промежуточного кода PHP.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Добавить кеш:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Удалить кеш:
apc_delete($key);
Пример установки кеша:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
APC почти в 5 раз быстрее Memcached.