1. 程式人生 > >Memcached(安裝使用、基本命令)

Memcached(安裝使用、基本命令)

memcached概述

Memcached是一個免費開源的、高效能的、具有分散式記憶體物件的快取系統

它通過減輕資料庫負載壓力,並且提高應用的效能和響應速度。

 

memcached特點

  1. 存放在記憶體中,並且以key-value的形式儲存。
  2. 用來儲存小塊的任意資料(page/slab/chunk)。
  3. 協議簡單
  4. 基於libevent的事件處理(epoll多路複用來同時管理多個IO流,用一個單一執行緒來管理/記錄/跟蹤多個socket IO流的狀態)

        Ngnix/redis/netty基於epoll模型開發

        Nodejs基於libev開發(libev類似libevent)

        JDK1.4提供非阻塞(NIO)的支援,JDK1.5版本使用epoll代替傳統的select/poll

    5.memcache互不通訊的分散式(基於客戶端的分散式)

memcached安裝

第一步:安裝libevent

#  yum install -y libevent

 

第二步:安裝memcached

# yum install -y memcached

 

第三步:啟動並使用memcached

# memcached -m 64 -p 11211 -u root -vvv

 

第四步:使用memcached

# telnet memcached_server_ip port(預設埠:11211) 例如:# telnet localhost 11211

 

memcached啟動引數

啟動引數

引數說明

-p <num>

監聽的TCP埠(預設: 11211)

-U <num>

監聽的UDP埠(預設: 11211, 0表示不監聽)

-s <file>

用於監聽的UNIX套接字路徑(禁用網路支援)

-a <mask>

UNIX套接字訪問掩碼,八進位制數字(預設:0700)

-l <ip_addr>

監聽的IP地址。(預設:INADDR_ANY,所有地址)

-d

作為守護程序來執行

-r

最大核心檔案限制

-u <username>

設定程序所屬使用者。(只有root使用者可以使用這個引數)

-m <num>

所有slab class可用記憶體的上限,以MB為單位。(預設:64MB)
(譯者注:也就是分配給該memcached例項的記憶體大小。)

-M

記憶體用光時報錯。(不會刪除資料)

-c <num>

最大併發連線數。(預設:1024)

-k

鎖定所有記憶體頁。注意你可以鎖定的記憶體上限。
試圖分配更多記憶體會失敗的,所以留意啟動守護程序時所用的使用者可分配的記憶體上限。(不是前面的 -u <username> 引數;在sh下,使用命令"ulimit -S -l NUM_KB"來設定。)

-v

提示資訊(在事件迴圈中列印錯誤/警告資訊。)

-vv

詳細資訊(還列印客戶端命令/響應)

-vvv

超詳細資訊(還列印內部狀態的變化)

-h

列印這個幫助資訊並退出

-i

列印memcached和libevent的許可

-P <file>

儲存程序ID到指定檔案,只有在使用 -d 選項的時候才有意義

-f <factor>

不同slab class裡面的chunk大小的增長倍率。(預設:1.25)
(譯者注:每個slab class裡面有相同數量個slab page,每個slab page裡面有chunk,且在當前slab class內的chunk大小固定,而不同slab class裡的chunk大小不一致,具體差異就是根據這個引數的倍率在增長,直到分配的記憶體用盡。)

-n <bytes>

chunk的最小空間(預設:48)
(譯者注:chunk資料結構本身需要消耗48個位元組,所以一個chunk實際消耗的記憶體是n+48。)

-L

嘗試使用大記憶體頁(如果可用的話)。提高記憶體頁尺寸可以減少"頁表緩衝(TLB)"丟失次數,提高執行效率。
為了從作業系統獲得大記憶體頁,memcached會把全部資料項分配到一個大區塊。

-D <char>

使用 <char> 作為字首和ID的分隔符
這個用於按字首獲得狀態報告。預設是":"(冒號)
如果指定了這個引數,則狀態收集會自動開啟;如果沒指定,則需要用命令"stats detail on"來開啟。

-t <num>

使用的執行緒數(預設:4)

-R

每個連線可處理的最大請求數

-C

禁用CAS(Check And Swap/Compare And Swap)

-b

設定後臺日誌佇列的長度(預設:1024)

-B

繫結協議 - 可能值:ascii,binary,auto(預設)

-I

重寫每個資料頁尺寸。調整資料項最大尺寸

 

 

 

memcached命令使用

命令型別

命令

 

儲存命令

set

set 命令用於將 value(資料值) 儲存在指定的 key(鍵) 中。

如果set的key已經存在,該命令可以更新該key所對應的原來的資料,也就是實現更新的作用

add

用於將 value(資料值) 儲存在指定的 key(鍵) 中。

如果 add 的 key 已經存在,則不會更新資料(過期的 key 會更新),之前的值將仍然保持相同,並且將獲得響應 NOT_STORED。

replace

用於替換已存在的 key(鍵) 的 value(資料值)。

如果 key 不存在,則替換失敗,並且將獲得響應 NOT_STORED

append

用於向已存在 key(鍵) 的 value(資料值) 後面追加資料

prepend

用於向已存在 key(鍵) 的 value(資料值) 前面追加資料 。

CAS

用於執行一個"檢查並設定"的操作

它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。

檢查是通過cas_token引數進行的, 這個引數是Memcach指定給已經存在的元素的一個唯一的64位值

查詢命令

get

獲取儲存在 key(鍵) 中的 value(資料值) ,如果 key 不存在,則返回空

gets

獲取帶有 CAS 令牌存 的 value(資料值) ,如果 key 不存在,則返回空。

delete

用於刪除已存在的 key(鍵)

incr/decr

用於對已存在的 key(鍵) 的數字值進行自增或自減操作。

incr 與 decr 命令操作的資料必須是十進位制的32位無符號整數。

如果 key 不存在返回 NOT_FOUND,如果鍵的值不為數字,則返回 CLIENT_ERROR,其他錯誤返回 ERROR。

統計命令

stats

返回統計資訊例如 PID(程序號)、版本號、連線數等

stats items

顯示各個 slab 中 item 的數目和儲存時長(最後一次訪問距離現在的秒數)

stats slabs

用於顯示各個slab的資訊,包括chunk的大小、數目、使用情況等。

stats size

用於顯示所有item的大小和個數。

該資訊返回兩列,第一列是 item 的大小,第二列是 item 的個數。

flush_all

用於清理快取中的所有 key=>value(鍵=>值) 對。

該命令提供了一個可選引數 time,用於在制定的時間後執行清理快取操作。

 

基本命令

add(CRUD中的C)

新增一個key。如果key存在,則不更新資料。

格式:add key 資料型別 過期時間 長度 [noreply]

  1. key:鍵值 key-value 結構中的 key,用於查詢快取值。
  2. flags:可以包括鍵值對的整型引數,客戶機使用它儲存關於鍵值對的額外資訊 。
  3. exptime:在快取中儲存鍵值對的時間長度(以秒為單位,0 表示永遠)

        如果小於30天會按照秒計算(30*24*3600),如果大於30天則轉換成unixtime時間戳而不是偏移量。

     4,.bytes:在快取中儲存的位元組數

     5.noreply(可選): 該引數告知伺服器不需要返回資料

     6.value:儲存的值(始終位於第二行)(可直接理解為key-value結構中的value)

set(CRUD中的U)

如果Key存在更新,如果不存在add(saveOrUpdate)

格式:set key 資料型別 過期時間 長度 [noreply]

get(CURD中的R)

獲取儲存的value值,如果key不存在返回空。

格式:get key [key1] [key2] [key3] ...... [keyN]

delete(CURD中的D)

刪除已經存在的key

格式:delete [key]

replace(CRUD中的U)

替換已經存在的值。如果key不粗存在,則替換失敗

格式:replace key flag exptime bytes [noreply]

append(CRUD中的U)

向已經存在key末尾追加資料。

格式:append key flag exptime bytes [noreply]

prepend(CRUD中的U)

向已經存在key最前面追加資料。

格式:prepend key flag exptime bytes [noreply]

CAS(check and swap/compare and swap)

根據樂觀鎖機制,對key值進行更新。Key在沒有被其他客戶端修改的情況下,才能更新。

格式:cas key flag exptime bytes token [noreply]

場景案例:秒殺

gets

獲取key的令牌值,如果key不存在,返回空。

格式:gets key [key1] [key2] [key3].... [keyN]

incr/decr

對於key的數值進行自增或者自減操作。

incr/decr操作的數值必須是十進位制的32位無符號型。

格式:incr key value

格式:decr key value