Spec-Zone .ru
спецификации, руководства, описания, API
|
PHP оказывает поддержку для функций Memcache посредством расширения PECL. Включать PHP memcache
расширения, создайте PHP использование --enable-memcache
опция, чтобы сконфигурировать, создавая из источника.
Если Вы устанавливаете на основанном на Red Hat сервере, можно установить php-pecl-memcache
ОБ/МИН:
root-shell> yum --install php-pecl-memcache
На Debian-на-основе дистрибутивах используйте php-memcache
пакет.
Чтобы установить глобальные параметры конфигурации времени выполнения, определите значения параметра
конфигурации в пределах Вашего php.ini
файл. Следующая таблица обеспечивает имя,
значение по умолчанию, и описание для каждого глобального параметра конфигурации времени выполнения.
Параметр конфигурации | Значение по умолчанию | Описание |
---|---|---|
memcache.allow_failover |
1 | Определяет, должен ли другой сервер в списке быть запрошен если первый сервер выбранные сбои. |
memcache.max_failover_attempts |
20 | Определяет число серверов, чтобы попробовать прежде, чем возвратить отказ. |
memcache.chunk_size |
8192 | Определяет размер сетевых блоков, используемых, чтобы обмениваться данными с memcached сервером. |
memcache.default_port |
11211 | Определяет порт значения по умолчанию, чтобы использовать, связываясь с memcached серверами. |
memcache.hash_strategy |
стандарт | Определяет который стратегия хеша использовать. Набор к consistent
позволять серверам быть добавленными или удаленными из пула, не заставляя ключи быть повторно
отображенным на другие серверы. Когда установлено в standard , более
старая (modula) стратегия используется, который потенциально использует различные серверы для
хранения.
|
memcache.hash_function |
crc32 | Определяет который функция использовать, отображая ключи на серверы. crc32 использует стандартный хеш CRC32. fnv
использует FNV-1a hashingalgorithm.
|
Чтобы создать соединение с memcached сервером, создайте новое
Memcache
возразите и затем определите опции соединения. Например:
<?php$cache = new Memcache;$cache->connect('localhost',11211);?>
Это открывает непосредственное соединение с указанным сервером.
Чтобы использовать многократные memcached серверы, Вы должны
добавить серверы к использованию объекта memcache addServer()
:
bool Memcache::addServer ( string $host [, int $port [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callback $failure_callback ]]]]]]] )
Механизм управления сервером в пределах php-memcache
модуль является критической
частью интерфейса, поскольку это управляет основным интерфейсом к memcached экземплярам и как различные экземпляры выбираются
через хеширующий механизм.
Создать простое соединение с двумя memcached экземплярами:
<?php$cache = new Memcache;$cache->addServer('192.168.0.100',11211);$cache->addServer('192.168.0.101',11211);?>
В этом сценарии соединение экземпляра явно не открывается, но только открывается, когда Вы пытаетесь сохранить
или получить значение. Чтобы включить персистентным соединениям с memcached экземплярами, установите $persistent
параметр истине. Это - настройка по умолчанию, и заставляет соединения оставаться открытыми.
Чтобы помочь управлять распределением ключей к различным экземплярам, используйте глобальную переменную memcache.hash_strategy
установка. Это устанавливает хеширующий механизм,
используемый, чтобы выбрать. Можно также добавить другой вес к каждому серверу, который эффективно увеличивает
число раз, запись экземпляра появляется в списке экземпляра, поэтому увеличивая вероятность экземпляра,
предпочитаемого другим экземплярам. Чтобы установить вес, установите значение $weight
параметр больше чем одному.
Функции для установки и получения информации идентичны универсальному функциональному интерфейсу, предлагаемому
memcached
, как показано в этой таблице:
PECL memcache Функция |
Родовая функция |
---|---|
get() |
Универсальный get() . |
set() |
Универсальный set() . |
add() |
Универсальный add() . |
replace() |
Универсальный replace() . |
delete() |
Универсальный delete() . |
increment() |
Универсальный incr() . |
decrement() |
Универсальный decr() . |
Полный пример PECL memcache
интерфейс обеспечивается ниже. Код загружает пленочные
данные из базы данных Sakila, когда пользователь обеспечивает пленочное имя. Данные, хранившие в memcached
экземпляр записывается как a mysqli
строка
результата, и API автоматически сериализируют информацию для Вас.
<?php$memc = new Memcache;$memc->addServer('localhost','11211');if(empty($_POST['film'])) {?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Simple Memcache Lookup</title> </head> <body> <form method="post"> <p><b>Film</b>: <input type="text" size="20" name="film"></p> <input type="submit"> </form> <hr/><?php} else { echo "Loading data...\n"; $film = htmlspecialchars($_POST['film'], ENT_QUOTES, 'UTF-8'); $mfilms = $memc->get($film); if ($mfilms) { printf("<p>Film data for %s loaded from memcache</p>", $mfilms['title']); foreach (array_keys($mfilms) as $key) { printf("<p><b>%s</b>: %s</p>", $key, $mfilms[$key]); } } else { $mysqli = mysqli('localhost','sakila','password','sakila'); if (mysqli_connect_error()) { sprintf("Database error: (%d) %s", mysqli_connect_errno(), mysqli_connect_error()); exit; } $sql = sprintf('SELECT * FROM film WHERE title="%s"', $mysqli->real_escape_string($film)); $result = $mysqli->query($sql); if (!$result) { sprintf("Database error: (%d) %s", $mysqli->errno, $mysqli->error); exit; } $row = $result->fetch_assoc(); $memc->set($row['title'], $row); printf("<p>Loaded (%s) from MySQL</p>", htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8'); }}?> </body></html>
С PHP соединения с memcached экземплярами сохраняются открытыми, пока PHP и связанный экземпляр Apache остаются работать. Добавляя или удаляя серверы из списка в рабочем экземпляре (например, запуская другой сценарий, который упоминает дополнительные серверы), соединения совместно используются, но сценарий только выбирает среди экземпляров, явно сконфигурированных в пределах сценария.
Чтобы гарантировать, что изменения к списку сервера в пределах сценария не вызывают проблемы, удостоверьтесь, что использовали непротиворечивый хеширующий механизм.