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 — Adiciona um servidor ao pool de servidores
Memcached::addServer() adiciona o servidor especificado ao
pool de servidores. Nenhuma conexão é estabelecida com o servidor neste momento, mas
se você estiver usando a opção de distribuição de key consistente (via
Memcached::DISTRIBUTION_CONSISTENT
ou
Memcached::OPT_LIBKETAMA_COMPATIBLE
), algumas das estruturas
de dados internas terão que ser atualizadas. Portanto, se você precisar adicionar
vários servidores, é melhor usar o
Memcached::addServers(), pois a atualização ocorrerá
apenas uma vez.
O mesmo servidor pode aparecer várias vezes no pool de servidores porque
nenhuma verificação de duplicação é feita. Isso não é aconselhável; em vez disso,
use weight
para aumentar o peso da seleção
desse servidor.
host
O nome do host do servidor memcache. Se o nome do host for inválido,
as operações relacionadas a dados definirão o código de resultado
Memcached::RES_HOST_LOOKUP_FAILURE
. A partir da
versão 2.0.0b1, este parâmetro também pode especificar o caminho de um arquivo de
socket unix ex. /path/to/memcached.sock
para usar sockets de domínio UNIX, neste caso, port
também deve ser definida como 0
.
port
A porta na qual o memcache está em execução. Geralmente, é
11211
. A partir da versão 2.0.0b1, defina esse parâmetro como 0
ao usar sockets de domínio UNIX.
weight
O peso do servidor relativo ao peso total de todos os servidores no pool. Isso controla a probabilidade do servidor ser selecionado para operações. Isso é usado apenas com opção de distribuição consistente e geralmente corresponde à quantidade de memória disponível para memcache naquele servidor.
Retorna true
em caso de sucesso ou false
em caso de falha.
Exemplo #1 Memcached::addServer() exemplo
<?php
$m = new Memcached();
/* Adiciona 2 servidores, para que o segundo
tem duas vezes mais chances de ser selecionado. */
$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