memcache的做用及安裝步驟

在搭建一套環境時偶然接觸到memcache這個東西,下面咱們就來談談什麼是memcache,何時使用memcache,怎麼安裝memcache!html


1.什麼是memcachenode

Memcache是danga.com的一個項目,最先是爲 LiveJournal 服務的,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力。它能夠應對任意多個鏈接,使用非阻塞的網絡IO。因爲它的工做機制是在內存中開闢一塊空間,而後創建一個HashTable,Memcached自管理這些HashTable。
linux

2.爲何要使用memcachegit

因爲網站的高併發讀寫需求,傳統的關係型數據庫開始出現瓶頸,例如:
1
)對數據庫的高併發讀寫:
關係型數據庫自己就是個龐然大物,處理過程很是耗時(如解析SQL語句,事務處理等)。若是對關係型數據庫進行高併發讀寫(每秒上萬次的訪問),那麼它是沒法承受的。
2
)對海量數據的處理:
對於大型的SNS網站,天天有上千萬次的蘇劇產生(如twitter, 新浪微博)。對於關係型數據庫,若是在一個有上億條數據的數據表種查找某條記錄,效率將很是低。
使用memcache能很好的解決以上問題。
在實際使用中,一般把數據庫查詢的結果保存到Memcache中,下次訪問時直接從memcache中讀取,而再也不進行數據庫查詢操做,這樣就在很大程度上減小了數據庫的負擔。
保存在memcache中的對象實際放置在內存中,這也是memcache如此高效的緣由。wKioL1YXbg-iKoKLAAEUuig5Ru4260.jpg數據庫

3.關於libevent的事件處理緩存

libevent是個程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能 封裝成統一的接口。即便對服務器的鏈接數增長,也能發揮O(1)的性能。
memcached
使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。
參考:
libevent:http://www.monkey.org/~provos/libevent/
The C10K Problem: http://www.kegel.com/c10k.html
服務器


4.cache如何支持高併發(此處還需深刻研究)網絡

memcache使用多路複用I/O模型,如(epoll, select等),傳統I/O中,系統可能會由於某個用戶鏈接還沒作好I/O準備而一直等待,知道這個鏈接作好I/O準備。這時若是有其餘用戶鏈接到服務器,極可能會由於系統阻塞而得不到響應。多線程

而多路複用I/O是一種消息通知模式,用戶鏈接作好I/O準備後,系統會通知咱們這個鏈接能夠進行I/O操做,這樣就不會阻塞在某個用戶鏈接。所以,memcache才能支持高併發。併發

此外,memcache使用了多線程機制。能夠同時處理多個請求。線程數通常設置爲CPU核數,這研報告效率最高。

Memcached單進程最大使用內存爲2G,要使用更多內存,能夠分多個端口開啓多個Memcached進程



wKiom1YXbtTDQverAACHlS8_qJM858.jpg

5.memcache的安裝詳解

注意:安裝路徑根據實際狀況修改

準備安裝文件

下載memcachedlibevent的安裝文件(文件夾內已經下載好了memcachedlibevent

http://memcached.org/

http://libevent.org/

注意,linux通常都帶有libevent,若是版本過老則考慮更新版本,若是版本不老那麼不必安裝libevent

  1. 安裝libevent(可選)

因爲memcached依賴於libevent,所以須要安裝libevent。因爲linux系統可能默認已經安裝libevent,執行命令:

rpm -qa|grep libevent 查看當前系統中libevent安裝的版本

查看系統是否帶有該安裝軟件,若是有且版本比較老,則執行命令:

rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(因爲系統自帶的版本舊,忽略依賴刪除)

 

安裝libevent命令:

tar zxvflibevent-2.0.22-stable.tar.gz

cdlibevent-2.0.22-stable

./configure--prefix=/usr/local/libevent

make

makeinstall

至此libevent安裝完畢;


安裝memcache

tar xvfmemcached-1.4.24.tar.gz (這個包有點問題,因此不加z)

cdmemcached-memcached-1.4.24

./configure--prefix=/usr/local/memcached --with-libevent=

/usr/local/libevent/

make

makeinstall

  至此memcached安裝完畢;

  1. 可能存在的錯誤以及解決方案

  若是出現客戶端鏈接不上memcached的狀況,請將防火牆關閉或將防火牆中的memcached端口(11211端口)打開。

  make&& make install時,報錯,make: *** No targets specified and no makefile found.  Stop.

從新./configure --prefix=/usr/local/memcached會發現checkingfor libevent directory... configure: error: libevent is required.

查看系統安裝的libevent

# rpm -qa | grep libevent

已經安裝,而後升級

#yum -y install libevent

測試libevent是否是已經安裝成功

# ls -al /usr/lib | grep libevent

能夠看到多個已經安裝的類包,而後再安裝memcached,編譯依舊通不過,

  安裝時報:checkingfor libevent directory... configure: error: libevent is required. You can getit from http://www.monkey.org/~provos/libevent/

 If it's alreadyinstalled, specify its path using --with-libevent=/dir/

由於libevent這個包是系統默認安裝的,沒有安裝相應的開發所用的頭文件。

因此,還要使用以下命令來安裝:

yum install libevent-devel

而後再從新安裝下memcachedOK

  1. memcached加入啓動項

# vi /etc/rc.local

在最後加入/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1-p 11211 -u root

  1. 啓動memcached

打開一個終端,輸入如下命令:

/usr/local/memcached/bin/memcached -d -m 128 -u root -p11211 -c 1024 –P /tmp/memcached.pid

  1. 中止memcached

打開一個終端,輸入如下命令:

ps -ef | grep memcached或者上面的ps命令也行,第二個字段爲PID,好比10068

輸入一下命令終止memcached服務

kill -9 10068

 

附:

啓動參數說明:

-d 選項是啓動一個守護進程。

-u root 表示啓動memcached的用戶爲root。

-m 是分配給Memcache使用的內存數量,單位是MB,默認64MB。

-M return error on memory exhausted (rather than removingitems)

-u 是運行Memcache的用戶,若是當前爲root 的話,須要使用此參數指定用戶。

-p 是設置Memcache的TCP監聽的端口,最好是1024以上的端口。

-c 選項是最大運行的併發鏈接數,默認是1024。

-P 是設置保存Memcache的pid文件。

 

另外還有個更詳細的參數說明:

memcached 1.4.2

-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>     單個數據項的最大可用內存,以MB爲單位。(默認:64MB)

-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>  塊大小增加因子。(默認:1.25)

-n <bytes>   分配給key+value+flags的最小空間(默認:48)

-L            嘗試使用大內存頁(若是可用的話)。提升內存頁尺寸能夠減小"頁表緩衝(TLB)"丟失次數,提升運行效率。

              爲了從操做系統得到大內存頁,memcached會把所有數據項分配到一個大區塊。

-D <char>     使用 <char> 做爲前綴和ID的分隔符。

              這個用於按前綴得到狀態報告。默認是":"(冒號)。

              若是指定了這個參數,則狀態收集會自動開啓;若是沒指定,則須要用命令"stats detailon"來開啓。

-t <num>     使用的線程數(默認:4)

-R            每一個鏈接可處理的最大請求數。

-C            禁用CAS。

-b            設置後臺日誌隊列的長度(默認:1024)

-B            綁定協議 - 可能值:ascii,binary,auto(默認)

-I            重寫每一個數據頁尺寸。調整數據項最大尺寸。

也能夠啓動多個守護進程,可是端口不能重複

查看memcached啓動命令

ps aux|grep memcached

相關文章
相關標籤/搜索