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 — Ajoute un serveur au pool
Description
$host
, int $port
[, int $weight = 0
] )
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 hashage 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.
Liste de paramètres
-
host -
Le nom d'hôte du serveur. Si le nom d'hôte est invalide, les fonctions d'état d'opération vont retourner le code de résultat
Memcached::RES_HOST_LOOKUP_FAILURE. -
port -
Le port sur lequel memcache fonctionne. Généralement, c'est 11211.
-
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.
Valeurs de retour
Cette fonction retourne TRUE en cas de
succès ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec Memcached::cas()
<?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);
?>
Voir aussi
- Memcached::addServers() - Ajoute plusieurs serveurs au pool
- Memcached::resetServerList() - Supprime tous les serveurs depuis la liste des serveurs
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
