Memcached::cas
(PECL memcached >= 0.1.0)
Memcached::cas — Сравнивает и устанавливает значение для записи
Описание
$cas_token
, string $key
, mixed $value
, int $expiration
= ?
) : bool
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);
?>
Смотрите также
- Memcached::casByKey() - Сравнивает и устанавливает значение для записи на конкретном сервере