(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);
?>