Memcached::cas
(PECL memcached >= 0.1.0)
Memcached::cas — Compara e troca um item
Descrição
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);
?>