1. 程式人生 > >memcache及其telnet命令使用詳解

memcache及其telnet命令使用詳解

con hit 過時 ida dump 錯誤 cati 如果 ble

1、啟動Memcache 常用參數
memcached 1.4.3
-p <num> 設置端口號(默認不設置為: 11211)
-U <num> UDP監聽端口 (默認: 11211, 0 時關閉)
-l <ip_addr> 綁定地址 (默認:所有都允許,無論內外網或者本機更換IP,有安全隱患,若設置為127.0.0.1就只能本機訪問)
-d 獨立進程運行
-u <username> 綁定使用指定用於運行進程 <username>
-m <num> 允許最大內存用量,單位M (默認: 64 MB)
-P <file> 將PID寫入文件<file>,這樣可以使得後邊進行快速進程終止, 需要與 -d 一起使用
如:
在linux下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121
在window下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500
在windows下註冊為服務後運行:
sc.exe create jb-Memcached binpath= “d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500″ start= auto
net start jb-Memcached

2、telnet連接

telnet 127.0.0.1 11211

3、寫入memcache

3.1 memcached Telnet Interface

Command Description Example

get Reads a value get mykey
set Set a key unconditionally set mykey 0 60 5
add Add a new key add newkey 0 60 5
replace Overwrite existing key replace key 0 60 5
append Append data to existing key append key 0 60 15
prepend Prepend data to existing key prepend key 0 60 15
incr Increments numerical key value by given number incr mykey 2
decr Decrements numerical key value by given number decr mykey 5
delete Deletes an existing key delete mykey
flush_all Invalidate specific items immediately flush_all
Invalidate all items in n seconds flush_all 900
stats Prints general statistics stats
Prints memory statistics stats slabs
Prints memory statistics stats malloc
Print higher level allocation statistics stats items
stats detail
stats sizes
Resets statistics stats reset
version Prints server version. version
verbosity Increases log level verbosity
quit Terminate telnet session quit

3.2 telnet請求命令格式

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
a) <command name> 可以是”set”, “add”, “replace”。
“set”表示按照相應的<key>存儲該數據,沒有的時候增加,有的覆蓋。
“add”表示按照相應的<key>添加該數據,但是如果該<key>已經存在則會操作失敗。
“replace”表示按照相應的<key>替換數據,但是如果該<key>不存在則操作失敗

b) <key> 客戶端需要保存數據的key。

c) <flags> 是一個16位的無符號的整數(以十進制的方式表示)。
該標誌將和需要存儲的數據一起存儲,並在客戶端get數據時返回。
客戶可以將此標誌用做特殊用途,此標誌對服務器來說是不透明的。

d) <exptime> 過期的時間。
若為0表示存儲的數據永遠不過時(但可被服務器算法:LRU 等替換)。
如果非0(unix時間或者距離此時的秒數),當過期後,服務器可以保證用戶得不到該數據(以服務器時間為標準)。

e) <bytes> 需要存儲的字節數(不包含最後的”\r\n”),當用戶希望存儲空數據時,<bytes>可以為0

f) 最後客戶端需要加上”\r\n”作為”命令頭”的結束標誌。
<data block>\r\n

緊接著”命令頭”結束之後就要發送數據塊(即希望存儲的數據內容),最後加上”\r\n”作為此次通訊的結束。

3.3 telnet響應命令

結果響應:reply
當以上數據發送結束之後,服務器將返回一個應答。可能有如下的情況:

a) “STORED\r\n”:表示存儲成功
b) “NOT_STORED\r\n” : 表示存儲失敗,但是該失敗不是由於錯誤。
通常這是由於”add”或者”replace”命令本身的要求所引起的,或者該項在刪除隊列之中。

如: set key 33 0 4\r\n
ffff\r\n

4、獲取/檢查KeyValue
get <key>*\r\n
a) <key>* 表示一個或者多個key(以空格分開)
b) “\r\n” 命令頭的結束

結果響應:reply
服務器端將返回0個或者多個的數據項。每個數據項都是由一個文本行和一個數據塊組成。當所有的數據項都接收完畢將收到”END\r\n”
每一項的數據結構:
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n

a) <key> 希望得到存儲數據的key
b) <falg> 發送set命令時設置的標誌項
c) <bytes> 發送數據塊的長度(不包含”\r\n”)
d) “\r\n” 文本行的結束標誌
e) <data block> 希望接收的數據項。
f) “\r\n” 接收一個數據項的結束標誌。

如果有些key出現在get命令行中但是沒有返回相應的數據,這意味著服務器中不存在這些項,這些項過時了,或者被刪除了
如:get aa
VALUE aa 33 4
ffff
END

5、刪除KeyValue:
delete <key> <time>\r\n

a) <key> 需要被刪除數據的key
b) <time> 客戶端希望服務器將該數據刪除的時間(unix時間或者從現在開始的秒數)
c) “\r\n” 命令頭的結束

6、檢查Memcache服務器狀態:
stats\r\n
在這裏可以看到memcache的獲取次數,當前連接數,寫入次數,已經命中率等;

pid : 進程id
uptime :總的運行時間,秒數
time : 當前時間
version : 版本號
……
curr_items : 當前緩存中的KeyValue數量
total_items : 曾經總共經過緩存的KeyValue數量
bytes : 所有的緩存使用的內存量
curr_connections 當前連接數
….
cmd_get : 總獲取次數
cmd_set : 總的寫入次數
get_hits : 總的命中次數
miss_hits : 獲取失敗次數
…..
bytes_read : 總共讀取的流量字節數
bytes_written : 總的寫入流量字節
limit_maxbytes : 最大允許使用的內存量,字節

7、高級緩存細節查看方法:
stats reset
清空統計數據

stats malloc
顯示內存分配數據

stats cachedump slab_id limit_num
顯示某個slab中的前limit_num個key列表,顯示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本顯示的是 訪問時間(timestamp)
1.2.4以上版本,包括1.2.4顯示 過期時間(timestamp)
如果是永不過期的key,expire_time會顯示為服務器啟動的時間

stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]

stats slabs
顯示各個slab的信息,包括chunk的大小、數目、使用情況等

stats items
顯示各個slab中item的數目和最老item的年齡(最後一次訪問距離現在的秒數)

stats detail [on|off|dump]
設置或者顯示詳細操作記錄

參數為on,打開詳細操作記錄
參數為off,關閉詳細操作記錄
參數為dump,顯示詳細操作記錄(每一個鍵值get、set、hit、del的次數)

8、清空所有鍵值
flush_all
註:flush並不會將items刪除,只是將所有的items標記為expired,因此這時memcache依舊占用所有內存。

8、退出
quit\r\n

memcache及其telnet命令使用詳解