Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::casComparar e intercambiar un ítem

Descripción

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

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.

Parámetros

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.

Valores devueltos

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.

Ejemplos

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

?>

Ver también

add a note add a note

User Contributed Notes 1 note

up
1
abodera at gmail dot com
3 years ago
Watch out!

When using binary protocol, the expected result after cas() is 21 (Memcached::RES_END).

For example, to make the above example #1 work with binary protocol, use the following:
<?php
$m
= new Memcached();
$m->addServer('localhost', 11211);
$m->setOption(Memcached::OPT_BINARY_PROTOCOL,true)

// [...]

   
} else {
       
$ips[] = $_SERVER['REMOTE_ADDR'];
       
$m->cas($cas, 'ip_block', $ips);
    }  
} while (
$m->getResultCode() != Memcached::RES_END);
?>
To Top