CakeFest 2024: The Official CakePHP Conference

Memcached::addServer

(PECL memcached >= 0.1.0)

Memcached::addServerAjoute un serveur au pool

Description

public Memcached::addServer(string $host, int $port, int $weight = 0): bool

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.

Liste de paramètres

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.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

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);
?>

Voir aussi

add a note

User Contributed Notes 3 notes

up
19
mbarriolinares at gmail dot com
11 years ago
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);
}

}
?>
up
15
Dave
11 years ago
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'
up
2
Robbie De Lise
12 years ago
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
To Top