Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::casComparar y cambiar un elemento

Descripción

public Memcached::cas(
    string|int|float $cas_token,
    string $key,
    mixed $value,
    int $expiration = 0
): bool

Memcached::cas() realiza una operación de "check and set" (literalmente, verificar y asignar), de manera que el elemento solo se almacena si ningún otro cliente lo ha actualizado desde que fue leído por el cliente actual. La verificación se realiza mediante el argumento cas_token que es un valor único de 64 bits, asignado al elemento por memcached. Consulte la documentación de Memcached::get*() para saber cómo obtener este valor. Tenga en cuenta que este valor se representa como un número flotante, debido a limitaciones en el espacio de enteros de PHP.

Parámetros

cas_token

Valor único asociado a un elemento existente. Generado por memcached.

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.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error. El método Memcached::getResultCode() va devolver la constante Memcached::RES_DATA_EXISTS si el elemento que se intenta almacenar ha sido modificado desde la última lectura.

Ejemplos

Ejemplo #1 Ejemplo con Memcached::cas()

<?php
$m
= new Memcached();
$m->addServer('localhost', 11211);

do {
/* Lee una IP y su CAS */
$ips = $m->get('ip_block', null, $cas);
/* Si la IP no existe aún, se crea y se realiza
un añadido atómico que fallará si la IP ya ha sido añadida */
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
/* De lo contrario, se añade la IP a la lista, y se almacena con la operación
compare-and-swap y el token, que fallará si la lista ha sido actualizada */
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while (
$m->getResultCode() != Memcached::RES_SUCCESS);

?>

Ver también