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'
Memcached::addServer
(PECL memcached >= 0.1.0)
Memcached::addServer — Añade un servidor al conjunto de servidores
Descripción
$host
, int $port
[, int $weight = 0
] )
Memcached::addServer() añade un servidor determinado al
conjunto de servidores. No se establece conexión al servidor en esta operación, pero
si se está usando la opción consistent key distribution (a través de
Memcached::DISTRIBUTION_CONSISTENT o
Memcached::OPT_LIBKETAMA_COMPATIBLE), algunas de las
estructuras de datos internas deberán ser actualizadas. Por lo tanto, si se necesita añadir
varios servidores, es mejor usar
Memcached::addServers() ya que la actualización sucede
una sola vez.
Puede suceder que el mismo servidor aparezca varias veces en el conjunto de servidores, por que no
se comprueban duplicados. Por lo tanto, no se aconseja. En su lugar, use la opción
weight para incrementar la importancia de uso del servidor respecto los demás servidores.
Parámetros
-
host -
El nombre del host del servidor memcache. Si el nombre del host no es válido, las operaciones con datos devolverán el código
Memcached::RES_HOST_LOOKUP_FAILUREcomo resultado. -
port -
El puerto en que memcache está funcionado. Normalmente es 11211.
-
weight -
La importancia del servidor relativa a la importancia total de todos los servidores en el conjunto de servidores. 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 el servidor.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de Memcached::addServer()
<?php
$m = new Memcached();
/* Añade 2 servidores, de forma que el segundo
tiene el doble de probabilidades de ser selecionado. */
$m->addServer('mem1.domain.com', 11211, 33);
$m->addServer('mem2.domain.com', 11211, 67);
?>
Ver también
- Memcached::addServers() - Añadir múltiple servidores al grupo de servidores
- Memcached::resetServerList() - Limpiar todos los servidores de la lista de servidores
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
