As of version 2.0.0b1 you can use Unix socket.
<?php
$m = new Memcached();
$m->addServer('/path/to/socket',0);
?>
Not to be confused with Memcache that use 'unix:///path/to/socket'
(PECL memcached >= 0.1.0)
Memcached::addServer — Добавляет сервер в пул
Memcached::addServer() добавляет указанный сервер в пул.
При этом соединение установлено не будет, но если вы используете настройку
консистентного распределения ключей (с помощью
Memcached::DISTRIBUTION_CONSISTENT
или
Memcached::OPT_LIBKETAMA_COMPATIBLE
), некоторые
внутренние структуры данных будут обновлены. Таким образом, если вам необходимо добавить
несколько серверов, предпочтительнее использовать
Memcached::addServers() т.к. обновление данных происходит однократно.
Один и тот же сервер может встречаться в пуле несколько раз, потому что никаких
проверок на дублирование вхождений нет. Но это не целесообразно; вместо этого
нужно использовать параметр weight
для повышения
приоритета данного сервера.
host
Имя хоста memcache сервера. Если имя хоста будет недействительным,
функции, работающие с данными установят результирующий код
Memcached::RES_HOST_LOOKUP_FAILURE
. В
версии 2.0.0b1, данный параметр может также определять путь до unix
сокет файла, например, /path/to/memcached.sock
для использования сокета домена UNIX (UDS), в данном случае port
должен быть установлен в 0
.
port
Порт на котором работает сервер memcache. Обычно это
11211
порт. В версии 2.0.0b1, установите этот параметр в 0
,
при использовании сокета домена UNIX (UDS).
weight
Весовой коэффициент для заданного сервера по отношению к общему весу всех серверов в пуле. Данная настройка управляет вероятностью сервера быть выбранным для использования. Она используется только в случае консистентного распределения и обычно соответствует количеству памяти, доступному для memcache на сервере.
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Пример #1 Пример использования Memcached::addServer()
<?php
$m = new Memcached();
/* Добавляет 2 сервера в пул, вероятность быть выбранным
у второго сервера в 2 раза выше. */
$m->addServer('mem1.domain.com', 11211, 33);
$m->addServer('mem2.domain.com', 11211, 67);
?>
As of version 2.0.0b1 you can use Unix socket.
<?php
$m = new Memcached();
$m->addServer('/path/to/socket',0);
?>
Not to be confused with Memcache that use 'unix:///path/to/socket'
Important to not call ->addServers() every run -- only call it if no servers exist (check getServerList() ); otherwise, since addServers() does not check for dups, it will let you add the same server again and again and again, resultings in hundreds if not thousands of connections to the MC daemon. Specially when using FastCGI.
Example:
<?php
class Cache {
private $id;
private $obj;
function __construct($id){
$this->id = $id;
$this->obj = new Memcached($id);
}
public function connect($host , $port){
$servers = $this->obj->getServerList();
if(is_array($servers)) {
foreach ($servers as $server)
if($server['host'] == $host and $server['port'] == $port)
return true;
}
return $this->obj->addServer($host , $port);
}
}
?>
On my Debian Squeeze system I was getting WRITE FAILURE errors. After debugging and finally tcpdump it seems that the problem was me adding the server 'localhost', which resolved to '::1' (ipv6) while the default memcached server on debian only listens to '127.0.0.1' (ipv4). DNS automatically prefers ipv6 over ipv4.
I added the server '127.0.0.1' instead and everything worked. You could also disable ipv6 or have memcached listen on ::1