(PECL memcached >= 0.1.0)
Memcached::cas — Comparar e intercambiar un ítem
Memcached::cas() realiza la operación "comprobar y definir",
de forma que el ítem será guardado solamente si ningún otro cliente actualizó el valor
desde la última vez que el cliente lo obtuvo. La comprobación se realiza mediante
el parámetro cas_token
que es un valor único de 64-bit
asignado al ítem existente por memcache. Vea la documentación de los métodos
Memcached::get*() para averiguar como obtener este
token. Nótese que el token está representado como double debido a las
limitaciones de espacio para enteros de PHP.
cas_token
El valor único asociado con el ítem existente. Generado por memcache.
key
La claven en donde se guardará el valor.
value
El valor a guardar.
expiration
Tiempo de expiración, por defecto definido a 0. VeaTiempos de Expiración para más info info.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Memcached::getResultCode() devolverá
Memcached::RES_DATA_EXISTS
si el ítem que se trata
de guardar ha sido modificado desde la última vez que se obtuvo.
Ejemplo #1 Ejemplos de Memcached::cas()
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
/* Obtener lista de direcciones IP y sus tokens */
$ips = $m->get('ip_block', null, $cas);
/* Si la lista no existe todavía, crea una y hace
un añadido atómico que fallará si alguien ya añadió un valor */
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
/* en caso contrario, añade la IP a la lista y guarda vía comprar-y-cambiar
con el token, que fallará si alguien ya actualizó la lista */
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>