Команда CAS в Memcached
Команда Memcached CAS (Check-And-Set или Compare-And-Swap) используется для выполнения операции "проверить и установить".
Она может записать значение только в том случае, если после того, как текущий клиент в последний раз получил значение, значение, соответствующее ключу, не было изменено другими клиентами.
Проверка выполняется с помощью параметра cas_token, который представляет собой уникальное 64-битное значение, назначаемое Memcached существующему элементу.
Синтаксис:
Базовый синтаксис команды CAS выглядит следующим образом:
cas key flags exptime bytes unique_cas_token [noreply] value
Описание параметров приведено ниже:
- key:Ключ в структуре ключ-значение, используемый для поиска кэшированного значения.
- flags: Целочисленный параметр, который может включать пары ключ-значение; клиент использует его для хранения дополнительной информации о паре ключ-значение.
- exptime: Время (в секундах), в течение которого пара ключ-значение хранится в кеше (0 означает бессрочно)
- bytes: Количество байтов, хранимых в кэше
- unique_cas_tokenУникальное 64-битное значение, полученное с помощью команды gets.
- noreply (необязательный): Этот параметр сообщает серверу, что не нужно возвращать данные
- value: Сохраняемое значение (всегда во второй строке) (можно понимать непосредственно как значение в структуре ключ-значение)
Пример
Чтобы использовать команду CAS в Memcached, необходимо получить токен от сервера Memcached с помощью команды gets.
Команда gets работает аналогично базовой команде get. Разница между двумя командами заключается в том, что gets возвращает немного больше информации: 64-битное целое значение, очень похожее на идентификатор «версии» для пары имя/значение.
Шаги примера следующие:
- Если уникальный токен не задан, команда CAS вернёт ошибку.
- Если ключ не существует, выполнение завершается неудачно.
- Добавьте пару ключ-значение.
- Получите уникальный токен с помощью команды gets.
- Используйте команду cas для обновления данных
- Используйте команду get, чтобы проверить, обновлены ли данные
cas tp 0 900 9 ERROR <− 缺少 token cas tp 0 900 9 2 memcached NOT_FOUND <− 键 tp 不存在 set tp 0 900 9 memcached STORED gets tp VALUE tp 0 9 1 memcached END cas tp 0 900 5 1 redis STORED get tp VALUE tp 0 5 redis END
Вывод
Если данные успешно добавлены, вывод будет:
STORED
Описание выходной информации:
- STORED: Вывод после успешного сохранения.
- ERROR: Ошибка сохранения или синтаксическая ошибка.
- EXISTS: Другой пользователь также обновил данные после последнего извлечения.
- NOT_FOUND: пара ключ-значение не существует на сервере Memcached.