Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::casCompara e troca um item

Descrição

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

Memcached::cas() realiza uma operação de "check and set", de forma que o item será armazenado apenas se nenhum outro cliente o tiver atualizado desde a última vez que foi buscado por este cliente. A verificação é feita por meio do parâmetro cas_token, que é um valor exclusivo de 64 bits atribuído ao item existente pelo memcache. Consulte a documentação dos métodos Memcached::get*() para saber como obter esse token. Observe que o token é representado como um float devido às limitações do espaço inteiro do PHP.

Parâmetros

cas_token

Valor exclusivo associado ao item existente. Gerado por memcache.

key

A chave sob a qual armazenar o valor.

value

O valor a ser armazenado.

expiration

O tempo de expiração padrão é 0. Consulte Tempos de Expiração para mais informações.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha. O Memcached::getResultCode() retornará Memcached::RES_DATA_EXISTS se o item que você está tentando armazenar tiver sido modificado desde a última vez que você o buscou.

Exemplos

Example #1 Memcached::cas() exemplo

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

do {
    /* busca lista de IP e seu token */
    $ips = $m->get('ip_block', null, $cas);
    /* se a lista ainda não existir, crie-a e faça
       uma adição atômica que falhará se alguém já tiver adicionado i */
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips = array($_SERVER['REMOTE_ADDR']);
        $m->add('ip_block', $ips);
    /* caso contrário, adicione o IP à lista e armazene via comparação e troca
       com o token, que falhará se outra pessoa atualizar a lista */
    } else {
        $ips[] = $_SERVER['REMOTE_ADDR'];
        $m->cas($cas, 'ip_block', $ips);
    }
} while ($m->getResultCode() != Memcached::RES_SUCCESS);

?>

Veja Também