Команда 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.
Другие расширения