Memcached(安裝使用、基本命令)
memcached概述
Memcached是一個免費開源的、高效能的、具有分散式記憶體物件的快取系統
它通過減輕資料庫負載壓力,並且提高應用的效能和響應速度。
memcached特點
- 存放在記憶體中,並且以key-value的形式儲存。
- 用來儲存小塊的任意資料(page/slab/chunk)。
- 協議簡單
- 基於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) |
-M |
記憶體用光時報錯。(不會刪除資料) |
-c <num> |
最大併發連線數。(預設:1024) |
-k |
鎖定所有記憶體頁。注意你可以鎖定的記憶體上限。 |
-v |
提示資訊(在事件迴圈中列印錯誤/警告資訊。) |
-vv |
詳細資訊(還列印客戶端命令/響應) |
-vvv |
超詳細資訊(還列印內部狀態的變化) |
-h |
列印這個幫助資訊並退出 |
-i |
列印memcached和libevent的許可 |
-P <file> |
儲存程序ID到指定檔案,只有在使用 -d 選項的時候才有意義 |
-f <factor> |
不同slab class裡面的chunk大小的增長倍率。(預設:1.25) |
-n <bytes> |
chunk的最小空間(預設:48) |
-L |
嘗試使用大記憶體頁(如果可用的話)。提高記憶體頁尺寸可以減少"頁表緩衝(TLB)"丟失次數,提高執行效率。 |
-D <char> |
使用 <char> 作為字首和ID的分隔符 |
-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]
- key:鍵值 key-value 結構中的 key,用於查詢快取值。
- flags:可以包括鍵值對的整型引數,客戶機使用它儲存關於鍵值對的額外資訊 。
- 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