# 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 服務上不存在該鍵值。
- Memcached 入門
- Memcached 簡介
- Memcached 安裝
- Memcached 連接
- Memcached 存儲命令
- Memcached set 命令
- Memcached add 命令
- Memcached replace 命令
- Memcached append 命令
- Memcached prepend 命令
- Memcached CAS 命令
- Memcached 查找命令
- Memcached get 命令
- Memcached gets 命令
- Memcached delete 命令
- Memcached incr 與 decr 命令
- Memcached 統計命令
- Memcached stats 命令
- Memcached stats items 命令
- Memcached stats slabs 命令
- Memcached stats sizes 命令
- Memcached flush_all 命令
- Memcached 實例
- Java 連接 Memcached 服務
- PHP 連接 Memcached 服務