Memcached

一、什麼是Memcached 
 (1)Memcached概述
 Memcached是一個免費的開源的、高性能的、具有又分佈式內存對象的緩存系統,它通過減輕數據庫負載加速動態WEB應用,
 
 (2)、Memcached和數據庫交互流程
    1>、檢查客戶端請求的數據是在Memcached中存在,如果存在,直接把請求的數據返回,不再對數據進行任何操作。
    2>、如果請求的數據不再Memcache中,就去查詢數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到Memcahe中
    3>、每次更新數據庫(如果更新、***數據庫的數據)的同時更新Memcache中的數據,保證Memcache中的數據數據庫中的數據一致。
    4>、當分配的Memcache內存空間用完之後,會使用LRU(Least Recetnly Used 最近最少使用
策略加到期失效策略,失效的數據首先被替換掉,然後再替換掉最近使用的數據.

 (3)、Memached特徵如下:
  Memcached作爲高性能的緩存服務器,具有如下特徵:
      1>、協議簡單
   Memcahed的協議實現比較簡單,使用的是基於文本的協議,能直接通過telnet在服務器上存取數據.

      2>、基於libevent的時間處理
Libevent使一套利用C開發的程序庫,它將BSD系統kqueue Linux系統的epoll等事件處理功能封裝成一個接口,確保即使服務端的鏈接數增加也能發揮很好的性能.Memcached利用這個庫進行異步事件處理。

     3>、內置的內存管理方式
   當內存但終得數據空間沾滿時,使用LRU算法自動***不使用的緩存,即重用過期數據的內存空間,Memcahed的爲緩存系統設計的.沒有考慮數據的容災問題,和機器的內存一樣,重啓機器數據將會丟失

      4>、互不通信的Memcached之間有分佈特徵。
各個Memcahed服務器之間相互不通信,都是獨立的存取數據,不共享任何信息,通過對客戶端的設計,讓Memcahed具有分佈式,能支持海量緩存的大規模一個應用.


二、Memcahed的安裝
(1)、安裝libevnet
Memcache用到了libevent這個庫用於Socket的處理,所以還需要安裝libevent。(如果你的系統已經安裝了libevent,可以不用安裝
#wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
# ls /usr/lib | grep libevent
# mkdir /opt/tmp && cd /opt/tmp
# mv /libevent-2.0.21-stable.tar.gz /opt/tmp
# tar -xvf libevent-2.0.21-stable.tar.gz
# cd libevent-2.0.21-stable
# ./configure --prefix=/usr && make && make install



(2)、安裝memcached
# wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
# tar -xvf memcached-1.4.0.tar.gz && cd memcached-1.4.0
# ./configure --with-libevent=/usr && make && make install
# ls -al /usr/local/bin/memcached 檢測是否安裝成功





(3)、啓動memcached
/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 512 -P /tmp/memcached.pid
-d選項是啓動一個守護進程,
-m是分配給Memcache使用的內存數量,單位是MB,我這裏是10MB,正常來說都分1024或者根據業務來分
-u是運行Memcache的用戶,我這裏是root,
-l是監聽的服務器IP地址,如果有多個地址的話,我這裏指定了服務器的IP地址192.168.0.200,
-p是設置Memcache監聽的端口,我這裏設置了12000,最好是1024以上的端口,
-c選項是最大運行的併發連接數,默認是1024,我這裏設置了256,按照你服務器的負載量來設定,
-P是設置保存Memcache的pid文件,我這裏是保存在 /tmp/memcached.pid





三、Memcahed測試
(1)、常見出錯
這說明沒有找到文件:libevent-1.2.so.1解決辦法如下:
/usr/local/bin/memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
# ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

(2)、基本測試
# telete 127.0.0.1 12000
# telnet 127.0.0.1 12000
set test 0 0 6  向test當中存儲數據
123456     輸入的key爲test存入數據
STORED       返回set結果
get test        獲取數據
VALUE test 0 6
123   取得key爲test中的數據
incr test 1   數據 增加1
124
decr test 2  數據減少2  
122
quit

(3)、參數說明
>stats
pid               Process id of this server process (memcache服務器的進程ID)
uptime            Number of seconds this server has been running (服務器已經運行的秒數)
time              Current UNIX time according to the server (服務器當前的UNIX時間)
version           Version string of this server (memcache版本)
pointer_size      Current system pointer 當前操作系統的指針大小(32位系統一般是32bit)
rusage_user       Accumulated user time for this process (該進程累計的用戶時間(秒:微妙))
rusage_system     Accumulated system time for this process (該進程累計的系統時間(秒:微妙))
curr_items        Current number of items stored by the server (服務器當前存儲的內容數量)
total_items       Total number of items stored by this server ever since it started (服務器啓動以來存儲過的內容總數)
bytes             Current number of bytes used by this server to store items (服務器當前存儲內容所佔用的字節數)
curr_connections  Number of open connections (當前打開着的連接數量)
total_connections Total number of connections opened since the server started running (服務器運行以來接受的連接總數)
connection_structures Number of connection structures allocated by the server (服務器分配的連接結構的數量)
cmd_get             Cumulative number of retrieval requests (get命令(獲取)總請求次數)
cmd_set             Cumulative number of storage requests (set命令(保存)總請求次數)
get_hits            Number of keys that have been requested and found present (請求成功的總次數)
get_misses          Number of items that have been requested and not found (請求失敗的總次數)
threads             Current number of thread (當前線程數)
bytes_read          Total number of bytes read by this server from network (服務器從網絡讀取到的總字節數)
bytes_written       Total number of bytes sent by this server to network (服務器向網絡發送的總字節數)
limit_maxbytes      Number of bytes this server is allowed to use for storage. (服務器在存儲時被允許使用的字節總數)
evictions           Number of valid items removed from cache to free memory for new items (爲獲取空閒內存而***的items數(分配給memcache的空間用滿後需要***舊的items來得到空間分配給新的items))
其中,最關注最多的幾個參數:
uptime:是memcached運行的秒數。
cmd_get:是查詢緩存的次數。
cmd_get/uptime 結果是平均每秒請求緩存的次數——結果值越大,說明Memcached的利用率越高,站點的訪問量大,如果太低,用文件系統緩存就可以了,根本不會體現出使用memcached的強大性能。
cmd_set:是設置key=>value的次數。整個memcached是個大hash,用cmd_get沒有找到的內容,就會調用一下cmd_set寫進緩存裏。
get_hits:是緩存命中的次數。所謂的命中率 = get_hits/cmd_get * 100%。
get_misses:是緩存未命中的次數。get_misses加上get_hits就等於cmd_get。
stats:顯示服務器信息、統計數據等
stats reset:清空統計數據
stats slabs:顯示各個slab的信息,包括chunk的大小、數目、使用情況等
stats items:顯示各個slab中item的數目和存儲時長(最後一次訪問距離現在的秒數)
quit:退出


(4)、重啓
# kill `cat /tmp/memcached.pid`


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章