Учебники

Memcached — команда CAS

CAS означает «проверить и установить» или «сравнить и заменить». Команда Memcached CAS используется для установки данных, если они не обновляются с момента последней выборки. Если ключ не существует в Memcached, то он возвращает NOT_FOUND .

Синтаксис

Основной синтаксис команды Memcached CAS показан ниже:

set key flags exptime bytes unique_cas_key [noreply]
value

Ключевые слова в синтаксисе описаны ниже.

  • ключ — это имя ключа, по которому данные сохраняются и извлекаются из Memcached.

  • флаги — это 32-разрядное целое число без знака, которое сервер хранит вместе с данными, предоставленными пользователем, и возвращает вместе с данными при получении элемента.

  • exptime — время истечения в секундах. 0 означает отсутствие задержки. Если время экспозиции превышает 30 дней, Memcached использует его как метку времени UNIX для истечения срока действия.

  • байты — это количество байтов в блоке данных, которое необходимо сохранить. Это длина данных, которые должны храниться в Memcached.

  • unique_cas_key — это уникальный ключ, полученный командой get.

  • noreply (необязательно) — это параметр, который информирует сервер не отправлять ответ.

  • значение — это данные, которые должны быть сохранены. Данные должны быть переданы в новой строке после выполнения команды с вышеуказанными параметрами.

ключ — это имя ключа, по которому данные сохраняются и извлекаются из Memcached.

флаги — это 32-разрядное целое число без знака, которое сервер хранит вместе с данными, предоставленными пользователем, и возвращает вместе с данными при получении элемента.

exptime — время истечения в секундах. 0 означает отсутствие задержки. Если время экспозиции превышает 30 дней, Memcached использует его как метку времени UNIX для истечения срока действия.

байты — это количество байтов в блоке данных, которое необходимо сохранить. Это длина данных, которые должны храниться в Memcached.

unique_cas_key — это уникальный ключ, полученный командой get.

noreply (необязательно) — это параметр, который информирует сервер не отправлять ответ.

значение — это данные, которые должны быть сохранены. Данные должны быть переданы в новой строке после выполнения команды с вышеуказанными параметрами.

Выход

Вывод команды такой, как показано ниже —

STORED
  • STORED указывает на успех.

  • ОШИБКА указывает на ошибку при сохранении данных или неправильный синтаксис.

  • EXISTS указывает, что кто-то изменил данные CAS с момента последней выборки.

  • NOT_FOUND указывает, что ключ не существует на сервере Memcached.

STORED указывает на успех.

ОШИБКА указывает на ошибку при сохранении данных или неправильный синтаксис.

EXISTS указывает, что кто-то изменил данные CAS с момента последней выборки.

NOT_FOUND указывает, что ключ не существует на сервере Memcached.

пример

Чтобы выполнить команду CAS в Memcached, вам нужно получить токен CAS из команды Memcached gets.

cas tp 0 900 9
ERROR
cas tp 0 900 9 2
memcached
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 2
redis
EXISTS
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END

CAS с использованием Java-приложения

Чтобы получить данные CAS с сервера Memcached, вам необходимо использовать метод Memcached gets .

пример

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
     
     // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());

      // Get cas token from cache
      long castToken = mcc.gets("tutorialspoint").cas;
      System.out.println("Cas token:"+castToken);

      // now set new data in memcached server
      System.out.println("Now set new data:"+mcc.cas("tutorialspoint",
      castToken, 900, "redis"));
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

Выход

При компиляции и выполнении программы вы увидите следующий вывод: