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);
?>
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-memcached.cas.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.