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 — Añade un servidor a la provisión de servidores
Memcached::addServer() añade el servidor especificado a la
provisión de servidores. En esta operación no se establece una conexión al servidor, aunque
si se emplea la opción de distribución de claves (a través de
Memcached::DISTRIBUTION_CONSISTENT
o
Memcached::OPT_LIBKETAMA_COMPATIBLE
), algunas de las
estructuras de datos internas deberán ser actualizadas. Así, si fuera necesario añadir
varios servidores, es mejor utilizar
Memcached::addServers(), ya que la actualización se realiza
una única vez.
El mismo servidor podría aparecer varias veces en la provisión de servidores, debido a que no
se realiza ninguna comprobación de duplicados. Esta característica no es aconsejable; emplee en su lugar la opción
weight
para aumentar el peso de selección (importancia)
de dicho servidor.
host
El nombre de host del servidor de memcache. Si el nombre de host no es válido,
las operaciones relacinadas con datos establecerán el
código de resultado Memcached::RES_HOST_LOOKUP_FAILURE
. A
partir de la versión 2.0.0b1, este parámetro puede también especificar la ruta de un
socket de unix, p.ej., /ruta/a/memcached.sock
,
para emplear socket de dominio de UNIX; en este caso también se debe establecer
port
a 0
.
port
El puerto en que memcache está funcionado. Normalmente es
11211
. A partir de la versión 2.0.0b1, se debe establecer este
parámetro a 0
al utilizar socket de dominio UNIX.
weight
El peso (importancia) del servidor relativo al peso total de todos los servidores en la provisión. Controla la probabilidad de que un servidor sea elegido para realizar operaciones. Solamente se utiliza para la opción de distribución consistente y normalmente corresponde a la cantidad de memoria disponible para memcache en dicho servidor.
Devuelve true
en caso de éxito o false
en caso de error.
Ejemplo #1 Ejemplo de Memcached::addServer()
<?php
$m = new Memcached();
/* Añadir 2 servidores, de forma que el segundo
tiene el doble de probabilidades de ser seleccionado. */
$m->addServer('mem1.dominio.com', 11211, 33);
$m->addServer('mem2.dominio.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