(PECL memcached >= 0.1.0)
Memcached::cas — Сравнивает и устанавливает значение для записи
$cas_token,$key,$value,$expiration = 0
Memcached::cas() осуществляет проверку и установку значения записи,
новое значение будет сохранено, только если другие клиенты не обновили его
со времени последнего обращения этим клиентом. Эта проверка осуществляется с помощью
параметра cas_token, который представляет собой 64-битное значение
присвоенное существующей записи сервером memcache. Обратитесь к документации метода
Memcached::get*(), который используется для получения этого токена.
Обратите внимание, что токен представлен в виде числа с плавающей точкой из-за ограничений
диапазона значений целочисленного типа в PHP.
cas_tokenУникальное значение, связанное с существующей записью. Генерируется сервером memcache.
keyКлюч, под которым сохраняется значение.
valueСохраняемое значение.
expirationВремя хранения объекта, по умолчанию равно 0. Подробнее об этом рассказывает раздел «Время хранения объекта».
Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
Метод Memcached::getResultCode() возвращает
Memcached::RES_DATA_EXISTS если запись которую вы пытаетесь сохранить
была изменена с момента последнего обращения.
Пример #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);
?>