Memcached CAS 命令

2018-08-10 19:39 更新

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于執(zhí)行一個"檢查并設(shè)置"的操作

它僅在當(dāng)前客戶端最后一次取值后,該key 對應(yīng)的值沒有被其他客戶端修改的情況下, 才能夠?qū)⒅祵懭搿?/p>

檢查是通過cas_token參數(shù)進(jìn)行的, 這個參數(shù)是Memcach指定給已經(jīng)存在的元素的一個唯一的64位值。

語法:

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

cas key flags exptime bytes unique_cas_token [noreply]
value

參數(shù)說明如下:

  • key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
  • flags:可以包括鍵值對的整型參數(shù),客戶機(jī)使用它存儲關(guān)于鍵值對的額外信息。
  • exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠(yuǎn))
  • bytes:在緩存中存儲的字節(jié)數(shù)
  • unique_cas_token通過 gets 命令獲取的一個唯一的64位值。
  • noreply(可選): 該參數(shù)告知服務(wù)器不需要返回數(shù)據(jù)
  • value:存儲的值(始終位于第二行)(可直接理解為key-value結(jié)構(gòu)中的value)

實例

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

gets 命令的功能類似于基本的 get 命令。兩個命令之間的差異在于,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 標(biāo)識符。

實例步驟如下:

  • 如果沒有設(shè)置唯一令牌,則 CAS 命令執(zhí)行錯誤。
  • 如果鍵 key 不存在,執(zhí)行失敗。
  • 添加鍵值對。
  • 通過 gets 命令獲取唯一令牌。
  • 使用 cas 命令更新數(shù)據(jù)
  • 使用 get 命令查看數(shù)據(jù)是否更新
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

輸出

如果數(shù)據(jù)添加成功,則輸出:

STORED

輸出信息說明:

  • STORED:保存成功后輸出。
  • ERROR:保存出錯或語法錯誤。
  • EXISTS:在最后一次取值后另外一個用戶也在更新該數(shù)據(jù)。
  • NOT_FOUND:Memcached 服務(wù)上不存在該鍵值。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號