Memcached 常用指令

一、常用的存儲數據的三個指令

主要的三個存儲數據的指令分別是:set、add、replace。

  • set指令:是直接保存到一個叫做key的數據到服務器上(不管這個數據是否存在);
  • add指令:是添加一個數據到memcached,如果這個key已存在,則不進行添加,若不存在,則執行添加;
  • replace指令:也是添加一個數據到memcached,但其與add指令相反,如果這個key存在,那麼就修改其key值,如果不存在,則返回錯誤,不進行任何操作;

上述三個指令的語法格式都是一樣的,只是指令不一樣而已,其指令的語法格式如下:

<命令> <鍵> <標記> <有效期> <數據長度>

在上述的語法格式中,解釋如下:

  • <命令>:就是add、set、replace等指令;
  • <鍵> - key:就是保存在服務器上唯一的一個標識符,不可以與其他的key衝突,否則會覆蓋掉原來的數據(使用set命令的話),這個key是爲了能夠準確的存取一個數據項目;
  • <標記> - flag:標記的是一個16位的無符號整型數據,用來設置服務器跟客戶端一些交互的操作;
  • <有效期> -expiration time:是數據在服務器上的有效期限,如果是0,則數據永遠有效,單位是秒,Memcached服務端會把一個數據的有效期設置爲當前Unix時間+設置的有效時間;
  • <數據長度> - bytes:數據的長度,block data數據塊的長度,一般這這個長度結束後下一行跟着block data數據內容,發送完數據以後,客戶端一般等待服務器端的返回;

1、set指令使用示例

[root@memcache1 ~]# telnet 192.168.171.132 11211   #連接到memcached數據庫
set lisi 0 0  3    3       #插入一個數據
aaa              #插入的數據爲aaa
STORED             #返回“STORED”則表示插入成功
get lisi                  #查詢插入的數據
VALUE lisi 0 3          
aaa
END
set lisi 0 0 4          #修改“lisi”這個key的值爲bbbb
bbbb
STORED
get lisi          #再次查看,確定更改成功
VALUE lisi 0 4
bbbb

2、add指令使用示例

以下實例中我們設置:
• key → new_key
• flag → 0
• exptime → 900 (以秒爲單位)
• bytes → 10 (數據存儲的字節數)
• value → data_value

add new_key 0 900 10
data_value
STORED
get new_key
VALUE new_key 0 10
data_value
END

輸出
如果數據添加成功,則輸出:
STORED

輸出信息說明:
• STORED:保存成功後輸出。
• NOT_STORED :在保持失敗後輸出。

3、replace 命令
Memcached replace 命令用於替換已存在的 key( 鍵) ) 的 value( 數據值) )。
如果 key 不存在,則替換失敗,並且將獲得響應 NOT_STORED。

replace 命令的基本語法格式如下:
replace key flags exptime bytes [noreply] value

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。
• exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
• bytes:在緩存中存儲的字節數
• noreply(可選): 該參數告知服務器不需要返回數據
• value:存儲的值(始終位於第二行)(可直接理解爲 key-value 結構中的 value)

使用實例

以下實例中將設置:
• key → mykey
• flag → 0
• exptime → 900 (以秒爲單位)
• bytes → 10 (數據存儲的字節數)
• value → data_value

以下實例中我們使用的鍵位 'mykey' 並存儲對應的值 data_value。執行後我們替換相同的 key 的值爲'some_other_value'。

add mykey 0 900 10
data_value
STORED
get mykey
VALUE mykey 0 10
data_value
END
replace mykey 0 900 16
some_other_value
get mykey
VALUE mykey 0 16
some_other_value
END

如果數據添加成功,則輸出:
STORED
輸出信息說明:
• STORED:保存成功後輸出。
• NOT_STORED:執行替換失敗後輸出。~~~~

4、append 命令
append 命令用於向已存在 key( 鍵) ) 的 value( 數據值) ) 後面追加數據 。
語法:
append 命令的基本語法格式如下:
append key flags exptime bytes [noreply] value

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。
• exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
• bytes:在緩存中存儲的字節數
• noreply(可選): 該參數告知服務器不需要返回數據
• value:存儲的值(始終位於第二行)(可直接理解爲 key-value 結構中的 value)
.
實例如下:
• 首先我們在 Memcached 中存儲一個鍵 runoob,其值爲 memcached。
• 然後,我們使用 get 命令檢索該值。
• 然後,我們使用 append 命令在鍵爲 runoob 的值後面追加 "redis"。
• 最後,我們再使用 get 命令檢索該值。

set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
append runoob 0 900 5
redis
STORED
get runoob
VALUE runoob 0 14
memcachedredis
END

輸出
如果數據添加成功,則輸出:
STORED

輸出信息說明:
• STORED:保存成功後輸出。
• NOT_STORED:該鍵在 Memcached 上不存在。
• CLIENT_ERROR:執行錯誤。

5、prepend 命令
prepend 命令用於向已存在 key( 鍵) ) 的 value( 數據值) ) 前面追加數據 ,與append正好相反。
語法:
prepend 命令的基本語法格式如下:
prepend key flags exptime bytes [noreply] value

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。
• exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
• bytes:在緩存中存儲的字節數
• noreply(可選): 該參數告知服務器不需要返回數據
• value:存儲的值(始終位於第二行)(可直接理解爲 key-value 結構中的 value)

實例如下:
• 首先我們在 Memcached 中存儲一個鍵 runoob,其值爲 memcached。
• 然後,我們使用 get 命令檢索該值。
• 然後,我們使用 prepend 命令在鍵爲 runoob 的值後面追加 "redis"。
• 最後,我們再使用 get 命令檢索該值。

set runoob 0 900 9

> memcached
> STORED
> get runoob
> VALUE runoob 0 14
> memcached
> END
> prepend runoob 0 900 5
> redis
> STORED
> get runoob
> VALUE runoob 0 14
> redismemcached
END 

如果數據添加成功,則輸出:
STORED
輸出信息說明:
• STORED:保存成功後輸出。
• NOT_STORED:該鍵在 Memcached 上不存在。
• CLIENT_ERROR:執行錯誤。
6、cas命令
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 服務上不存在該鍵值。

.
二、常用的查找命令
1、 get命令
get 命令獲取存儲在 key( 鍵) ) 中的 value( 數據值) ) ,如果 key 不存在,則返回空。

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

多個 key 使用空格隔開,如下:
get key1 key2 key3
參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
實例
在以下實例中,我們使用 runoob 作爲 key,過期時間設置爲 900 秒。

set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END

2、 gets 命令
gets 命令獲取帶有 CAS 令牌存 的 value( 數據值) ) ,如果 key 不存在,則返回空。

gets 命令的基本語法格式如下:
gets key
多個 key 使用空格隔開,如下:
gets key1 key2 key3
參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
實例
在以下實例中,我們使用 runoob 作爲 key,過期時間設置爲 900 秒。

set runoob 0 900 9
memcached
STORED
gets runoob
VALUE runoob 0 9 1
memcached
END 

在 使用 gets 命令的輸出結果中,在最後一列的數字 1 代表了 key 爲 runoob 的 CAS 令牌。

3、delete 命令
delete 命令用於刪除已存在的 key(鍵)。

delete 命令的基本語法格式如下:
delete key [noreply]

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• noreply(可選): 該參數告知服務器不需要返回數據

實例
在以下實例中,我們使用 runoob 作爲 key,過期時間設置爲 900 秒。之後我們使用 delete 命令刪除該 key。

set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
delete runoob
DELETED
get runoob
END
delete runoob
NOT_FOUND 

輸出信息說明:
• DELETED:刪除成功。
• ERROR:語法錯誤或刪除失敗。
• NOT_FOUND:key 不存在。

4、 incr 與 decr 命令
incr 與 decr 命令用於對已存在的 key(鍵) 的數字值進行自增或自減操作。
incr 與 decr 命令操作的數據必須是十進制的 32 位無符號整數。
如果 key 不存在返回 NOT_FOUND,如果鍵的值不爲數字,則返回 CLIENT_ERROR,其他錯誤返回 ERROR。
incr 命令

incr 命令的基本語法格式如下:
incr key increment_value

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• increment_value: 增加的數值。
實例
在以下實例中,我們使用 visitors 作爲 key,初始值爲 10,之後進行加 5 操作。

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
incr visitors 5
15
get visitors
VALUE visitors 0 2
15
END
輸出信息說明:
• NOT_FOUND:key 不存在。
• CLIENT_ERROR:自增值不是對象。
• ERROR 其他錯誤,如語法錯誤等。

decr 命令的基本語法格式如下:
decr key decrement_value

參數說明如下:
• key:鍵值 key-value 結構中的 key,用於查找緩存值。
• decrement_value: 減少的數值。
實例

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
decr visitors 5
5
get visitors
VALUE
visitors 0 1
5
END
輸出信息說明:
• NOT_FOUND:key 不存在。
• CLIENT_ERROR:自增值不是對象。
• ERROR 其他錯誤,如語法錯誤等。

5、 stats 命令
stats 命令用於返回統計信息例如 PID(進程號)、版本號、連接數等。

stats 命令的基本語法格式如下:
stats
實例
在以下實例中,我們使用了 stats 命令來輸出 Memcached 服務信息。

stats

這裏顯示了很多狀態信息,下邊詳細解釋每個狀態項:
• pid: memcache 服務器進程 ID
• uptime:服務器已運行秒數
• time:服務器當前 Unix 時間戳
• version:memcache 版本
• pointer_size:操作系統指針大小
• rusage_user:進程累計用戶時間
• rusage_system:進程累計系統時間
• curr_connections:當前連接數量
• total_connections:Memcached 運行以來連接總數
• connection_structures:Memcached 分配的連接結構數量
• cmd_get:get 命令請求次數
• cmd_set:set 命令請求次數
• cmd_flush:flush 命令請求次數
• get_hits:get 命令命中次數
• get_misses:get 命令未命中次數
• delete_misses:delete 命令未命中次數
• delete_hits:delete 命令命中次數
• incr_misses:incr 命令未命中次數
• incr_hits:incr 命令命中次數
• decr_misses:decr 命令未命中次數
• decr_hits:decr 命令命中次數
• cas_misses:cas 命令未命中次數
• cas_hits:cas 命令命中次數
• cas_badval:使用擦拭次數
• auth_cmds:認證命令處理的次數
• auth_errors:認證失敗數目
• bytes_read:讀取總字節數
• bytes_written:發送總字節數
• limit_maxbytes:分配的內存總大小(字節)
• accepting_conns:服務器是否達到過最大連接(0/1)
• listen_disabled_num:失效的監聽數
• threads:當前線程數
• conn_yields:連接操作主動放棄數目
• bytes:當前存儲佔用的字節數
• curr_items:當前存儲的數據總數
• total_items:啓動以來存儲的數據總數
• evictions:LRU 釋放的對象數目
• reclaimed:已過期的數據條目來存儲新數據的數目

6、stats items 命令
stats items 命令用於顯示各個 slab 中 item 的數目和存儲時長(最後一次訪問距離現在的秒數)。

stats items 命令的基本語法格式如下:
stats items
7、stats slabs 命令
stats slabs 命令用於顯示各個 slab 的信息,包括 chunk 的大小、數目、使用情況等。

stats slabs 命令的基本語法格式如下:
stats slabs
8、 stats sizes 命令
Memcached stats sizes 命令用於顯示所有 item 的大小和個數。
該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數。

stats sizes 命令的基本語法格式如下:
stats sizes
實例
stats sizes STAT 96 1 END
9、 flush_all 命令
flush_all 命令用於用於清理緩存中的所有 key=>value( 鍵 => 值) ) 對。
該命令提供了一個可選參數 time,用於在指定的時間後執行清理緩存操作。

flush_all 命令的基本語法格式如下:
flush_all [time] [noreply]
實例
清理緩存:

set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
flush_all
OK
get runoob
END
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章