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 服務上不存在該鍵值。