Memcached Memcached::cas
(PECL memcached >= 0.1.0)
Memcached::cas — 아이템 비교 및 교환
설명
public Memcached::cas( float $cas_token, string $key, mixed $value, int $expiration = ? ): bool
Memcached::cas()는 "확인 및 설정" 작업을 수행하므로 이 클라이언트가 마지막으로 가져온 이후 다른 클라이언트가 항목을 업데이트하지 않은 경우에만 항목이 저장됩니다. 확인은 memcache에 의해 기존 항목에 할당된 고유한 64비트 값인 cas_token
매개변수를 통해 수행됩니다. 이 토큰을 얻는 방법은 Memcached::get*()
메서드에 대한 설명서를 참조하십시오. 토큰은 PHP의 정수 공간의 제한으로 인해 이중으로 표시됩니다.
매개변수
cas_token
- 기존 항목과 연결된 고유 값입니다. Memcache에 의해 생성됩니다.
key
- 값을 저장할 키입니다.
value
- 저장할 값입니다.
expiration
- 만료 시간, 기본값은 0입니다. 자세한 내용은 만료 시간을 참조하세요.
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다. Memcached::getResultCode()는 저장하려는 항목이 마지막으로 가져온 이후 수정된 경우 Memcached::RES_DATA_EXISTS
를 반환합니다.
Examples
예제 #1 Memcached::cas() 예제
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
/* fetch IP list and its token */
$ips = $m->get('ip_block', null, $cas);
/* if list doesn't exist yet, create it and do
an atomic add which will fail if someone else already added it */
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
/* otherwise, add IP to the list and store via compare-and-swap
with the token, which will fail if someone else updated the list */
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>
기타
- Memcached::casByKey() - 특정 서버에서 항목 비교 및 교환