Memcached - CAS 命令



CAS 代表檢查並設定 (Check-And-Set) 或比較並交換 (Compare-And-Swap)。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
廣告