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 — Ajoute un serveur au pool
Memcached::addServer() ajoute le serveur indiqué
au pool de serveurs. Aucune connexion n'est établie à ce moment-là, mais
si vous utilisez la clé de distribution par hachage cohérent (via
Memcached::DISTRIBUTION_CONSISTENT
ou
Memcached::OPT_LIBKETAMA_COMPATIBLE
), certaines structures
internes vont être mises à jour. Par conséquent, si vous devez ajouter plusieurs
serveurs, il est recommandé d'utiliser Memcached::addServers()
pour que la mise à jour n'arrive qu'une seule fois.
Le même serveur peut apparaître plusieurs fois dans le pool, car aucune
recherche de doublon n'est faite. Ce n'est pas recommandé : utilisez plutôt
le paramètre weight
pour augmenter le poids d'un serveur
dans la sélection.
host
Le nom d'hôte du serveur memcache. Si le nom d'hôte n'est pas valide,
les opérations sur les données vont définir le code résultat
Memcached::RES_HOST_LOOKUP_FAILURE
. Depuis
la version 2.0.0b1, ce paramètre peut aussi spécifier le chemin
vers un socket Unix, par exemple; /chemin/vers/memcached.sock
pour utiliser le socket de domaine Unix, et dans ce cas,
le paramètre port
doit aussi être défini à
0
.
port
Le port sur lequel memcache fonctionne. Généralement, c'est
11211
. Depuis la version 2.0.0b1, définissez
ce paramètre à 0
lorsque vous utilisez des sockets
de domaine Unix.
weight
Le poids du serveur relativement au poids total de tous les serveurs. Cela contrôle la probabilité qu'un serveur soit sélectionné durant les opérations. Cette option n'est utilisée qu'avec la distribution cohérente, et généralement, cela correspond au total de mémoire disponible sur ce serveur.
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Exemple #1 Exemple avec Memcached::addServer()
<?php
$m = new Memcached();
/* Ajoute deux serveurs, et le second est deux fois
plus sollicité que le premier */
$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