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

memcached概述

Memcached是一個免費開源的、高性能的、具備分佈式內存對象的緩存系統redis

它經過減輕數據庫負載壓力,而且提升應用的性能和響應速度。數據庫

 

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 libeventapp

 

第二步:安裝memcachedsocket

# 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

 

統計命令

stats

stats命令主要用於返回統計信息。

stats items

主要用於顯示slab中的item數量和存儲時長。

stats slabs

主要用於顯示slab的信息,好比:大小/數量/使用狀況。

 

stats size

STAT 96 1 主要顯示item的大小和個數。

第一個值item大小,第二個值是item個數。

 

flush_all

清除緩存中全部的key-value鍵值對。

相關文章
相關標籤/搜索