Memcached::cas
(PECL memcached >= 0.1.0)
Memcached::cas — Compare et échange un élément
Description
Memcached::cas() effectue une opération de
"check and set" (littéralement, vérifie et assigne),
de manière à ce que l'élément ne soit stocké que si aucune autre client
ne l'a mise à jour depuis qu'il a été lu par le client courant. La vérification
est faîte via le paramètre cas_token
qui est une
valeur 64 bits unique, assignée à l'élément par memcached. Voyez la documentation
de Memcached::get*() pour savoir comment obtenir cette
valeur. Notez que cette valeur est représentée par un nombre décimal, à cause
de limitations dans l'espace des entiers de PHP.
Liste de paramètres
-
cas_token
-
Valeur unique associée à un élément existant. Généré par memcached.
-
key
-
La clé avec laquelle stocker la valeur.
-
value
-
La valeur à stocker.
-
expiration
-
Le délai d'expiration, par défaut à zéro. Voyez délais d'expiration pour plus d'informations.
Valeurs de retour
Cette fonction retourne TRUE
en cas de
succès ou FALSE
si une erreur survient.
La méthode Memcached::getResultCode() va retourner
la constante Memcached::RES_DATA_EXISTS
si l'élément que
vous essayez de stocker a été modifié depuis votre dernière lecture.
Exemples
Exemple #1 Exemple avec Memcached::cas()
<?php $m = new Memcached(); $m->addServer('localhost', 11211); do { /* Lit une IP et son CAS */ $ips = $m->get('ip_block', null, $cas); /* Si l'IP n'existe pas encore, on la crèe et on fait un ajout atomique qui va échouer si l'IP a déjà été ajoutée */ if ($m->getResultCode() == Memcached::RES_NOTFOUND) { $ips = array($_SERVER['REMOTE_ADDR']); $m->add('ip_block', $ips); /* Sinon, on ajoute l'IP à la liste, et on la stocke avec l'opération compare-and-swap et le token, qui va échouer si la liste a été mise à jour */ } else { $ips[] = $_SERVER['REMOTE_ADDR']; $m->cas($cas, 'ip_block', $ips); } } while ($m->getResultCode() != Memcached::RES_SUCCESS); ?>