Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::casCompare et échange un élément

Description

public bool Memcached::cas ( float $cas_token , string $key , mixed $value [, int $expiration ] )

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()

  1. <?php
  2. $m = new Memcached();
  3. $m->addServer('localhost', 11211);
  4.  
  5. do {
  6. /* Lit une IP et son CAS */
  7. $ips = $m->get('ip_block', null, $cas);
  8. /* Si l'IP n'existe pas encore, on la crèe et on fait un
  9. ajout atomique qui va échouer si l'IP a déjà été ajoutée */
  10. if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
  11. $ips = array($_SERVER['REMOTE_ADDR']);
  12. $m->add('ip_block', $ips);
  13. /* Sinon, on ajoute l'IP à la liste, et on la stocke avec l'opération
  14. compare-and-swap et le token, qui va échouer si la liste a été mise à jour */
  15. } else {
  16. $ips[] = $_SERVER['REMOTE_ADDR'];
  17. $m->cas($cas, 'ip_block', $ips);
  18. }
  19. } while ($m->getResultCode() != Memcached::RES_SUCCESS);
  20.  
  21. ?>

Voir aussi

LoadingChargement en cours