Memcached::cas
(PECL memcached >= 0.1.0)
Memcached::cas — 값 비교 및 교환
설명
public bool Memcached::cas ( float $cas_token , string $key , mix $value [, int $expiration ] )
Memcached::cas()는 "확인 및 설정" 작업을 수행하므로, it 현재 클라이언트가 마지막으로 값을 검색한 후 해당 키에 해당하는 값이 다른 클라이언트에 의해 수정되지 않은 경우에만 값을 쓸 수 있습니다. 확인은 cas_token 매개변수를 통해 수행됩니다. 이 매개변수는 Memcach가 기존 요소에 할당한 고유한 64비트 값입니다. 이 값을 얻는 방법은 Memcached::get*() 메서드 시리즈의 문서를 확인하세요. 참고: 이 값은 PHP의 정수 공간 제한으로 인해 double 유형입니다.
주석: 이는 Memcache 확장에 비해 Memcached 확장의 매우 중요한 장점입니다. 이러한 시스템 수준 충돌 감지 메커니즘(낙관적 잠금)(Memcache 자체에서 제공)을 사용하면 높은 동시성에서 데이터 보안을 보장할 수 있습니다. .
매개변수
cas_token
Memcache에서 생성된 기존 요소와 관련된 고유 값입니다.
key
값을 저장하는 데 사용되는 키 이름입니다.
값
저장된 값입니다.
만료
만료 시간, 기본값은 0입니다. 자세한 내용은 만료 시간을 참조하세요.
반환 값
성공 시 TRUE, 실패 시 FALSE를 반환합니다. Memcached::getResultCode()는 요소를 저장하려고 할 때 이 클라이언트가 마지막으로 검색한 이후 다른 클라이언트에 의해 요소가 수정된 것으로 발견되면 Memcached::RES_DATA_EXISTS를 반환합니다.
예
예 #1 Memcached::cas() 예
<?php $m = new Memcached(); $m->addServer('localhost', 11211); do { /* 获取ip列表以及它的标记 */ $ips = $m->get('ip_block', null, $cas); /* 如果列表不存在, 创建并进行一个原子添加(如果其他客户端已经添加, 这里就返回false)*/ if ($m->getResultCode() == Memcached::RES_NOTFOUND) { $ips = array($_SERVER['REMOTE_ADDR']); $m->add('ip_block', $ips); /* 其他情况下,添加ip到列表中, 并以cas方式去存储, 这样当其他客户端修改过, 则返回false */ } else { $ips[] = $_SERVER['REMOTE_ADDR']; $m->cas($cas, 'ip_block', $ips); } } while ($m->getResultCode() != Memcached::RES_SUCCESS); ?>