(PECL memcached >= 0.1.0)
Memcached::cas — Comparar e intercambiar un ítem
Memcached::cas() realiza una operación "comprobar y establecer" ('cas' por sus siglas en inglés), de forma que el ítem será guardado solamente si ningún otro cliente lo actualizó desde la última vez que este cliente lo obtuvo. La comprobación se realiza mediante el parámetro cas_token
, el cual es un valor único de 64 bit asignado al ítem existente por memcache. Ver la documentación de los métodos Memcached::get*() para saber cómo obtener este token. Observar que el token está representado como un valor de tipo double debido a las limitaciones de espacio para valores integer de PHP.
cas_token
El valor único asociado con el ítem existente. Generado por memcache.
key
La clave en la que se guardará el valor.
value
El valor a guardar.
expiration
Tiempo de expiración, que por defecto es 0. Ver Tiempos de expiración para más información.
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 Ejemplo de Memcached::cas()
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
$ips = $m->get('ip_block', null, $cas);
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>