Memcached 命令

fmms 12年前發布 | 47K 次閱讀 緩存服務器 memcached

Memcache 的命令行用法:

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 127.0.0.1 11211

   不要說不會用這個?

3、寫入memcache

  <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"作為此次通訊的結束。
    結果響應:reply
    當以上數據發送結束之后,服務器將返回一個應答。可能有如下的情況:


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

   如: set key 33 0 4\r\n(回車)

        ffff\r\n(回車)

     顯示:stored

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依舊占用所有內存。

9、退出

   quit\r\n 

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!