Memcached::appendByKey
Memcached::casByKey
Memcached
PHP Manual

# Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::cas — Compare et échange un élément

### Description

public bool Memcached::cas ( double `$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, `FALSE` en cas d'échec. 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);
?>`

### Voir aussi

- Memcached::casByKey - Compare et échange un élément sur un serveur

Memcached::appendByKey
Memcached::casByKey
Memcached
PHP Manual