Memcached - CAS 命令


CAS 代表“检查并设置”或“比较并交换”。Memcached CAS命令用于设置数据(如果自上次获取后未更新)。如果 Memcached 中不存在该键,则返回NOT_FOUND

句法

Memcached CAS命令的基本语法如下所示:

set key flags exptime bytes unique_cas_key [noreply]
value

语法中的关键字如下所述 -

  • key - 这是从 Memcached 存储和检索数据的键的名称。

  • flags - 它是服务器与用户提供的数据一起存储的 32 位无符号整数,并在检索项目时与数据一起返回。

  • exptime - 过期时间(以秒为单位)。0 表示无延迟。如果 exptime 超过 30 天,Memcached 将其用作过期的 UNIX 时间戳。

  • bytes - 数据块中需要存储的字节数。这是需要存储在Memcached 中的数据的长度。

  • unique_cas_key - 这是从 gets 命令获取的唯一密钥。

  • noreply (可选) - 这是一个参数,通知服务器不要发送任何回复。

  • value - 这是需要存储的数据。使用上述选项执行命令后,需要在新行中传递数据。

输出

命令的输出如下所示 -

STORED
  • STORED表示成功。

  • ERROR 表示保存数据时出错或语法错误。

  • EXISTS表示自上次获取以来有人修改了 CAS 数据。

  • NOT_FOUND表示该键在 Memcached 服务器中不存在。

例子

要在 Memcached 中执行 CAS 命令,您需要从 Memcached gets 命令获取 CAS 令牌。

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

使用 Java 应用程序的 CAS

要从 Memcached 服务器获取 CAS 数据,您需要使用 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"));
   }
}

输出

在编译和执行程序时,您会看到以下输出 -

Connection to server successful
set status:true
Cas token:3
Now set new data:OK
Get from Cache:redis