(PECL memcached >= 0.1.0)
Memcached::cas — Сравнивает и устанавливает значение для записи
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);
?>