Memcached CAS 命令

Memcached CAS 命令

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用於執行一個"檢查並設定"的操作

它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。

檢查是通過cas_token引數進行的, 這個引數是Memcach指定給已經存在的元素的一個唯一的64位值。

語法:

CAS 命令的基本語法格式如下:

cas key flags exptime bytes unique_cas_token [noreply]
value

引數說明如下:

  • key:鍵值 key-value 結構中的 key,用於查詢快取值。
  • flags:可以包括鍵值對的整型引數,客戶機使用它儲存關於鍵值對的額外資訊 。
  • exptime:在快取中儲存鍵值對的時間長度(以秒為單位,0 表示永遠)
  • bytes:在快取中儲存的位元組數
  • unique_cas_token通過 gets 命令獲取的一個唯一的64位值。
  • noreply(可選): 該引數告知伺服器不需要返回資料
  • value:儲存的值(始終位於第二行)(可直接理解為key-value結構中的value)

例項

要在 Memcached 上使用 CAS 命令,你需要從 Memcached 服務商通過 gets 命令獲取令牌(token)。

gets 命令的功能類似於基本的 get 命令。兩個命令之間的差異在於,gets 返回的資訊稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 識別符號。

例項步驟如下:

  • 如果沒有設定唯一令牌,則 CAS 命令執行錯誤。
  • 如果鍵 key 不存在,執行失敗。
  • 新增鍵值對。
  • 通過 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 服務上不存在該鍵值。