Memcached 是一個高效能的分布式記憶體對象緩衝系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是用戶端可以用任何語言來編寫,並通過memcached協議與守護進程通訊。
Memcache是一個高效能的分布式的記憶體對象緩衝系統,通過在記憶體裡維護一個統一的巨大的hash表,它能夠用來儲存各種格式的資料.簡單的說就是將資料調用到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。
工作原理:
①用戶端第一次訪問應用程式時,會到資料庫(RDBMS)中取出資料,返回給用戶端;同時也將取出的資料儲存到memcached中。
② 第二次訪問時,因為資料已經緩衝,不不用去資料庫查詢了,直接從memcached取。
那麼memcached的快速和高效率是如何體現出來的呢。我們都清楚,RDBMS是檔案型的資料庫,最終還是以檔案的形式儲存在磁碟上。而memcached則不一樣,它是key:value關係型的資料庫,是儲存在記憶體中的。那麼就不用我再做說明了,記憶體的讀寫速度要比磁碟的讀寫速度快得多,前者是後者的10的6次方倍。http://blog.rekfan.com/?p=172
下面進入正題:
首先,memcached是基於libevent的,所以確保你的系統已經裝了libevent,libevent是個程式庫,它將Linux的epoll、BSD類作業系統的kqueue等事件處理功能封裝成統一的介面。即使對伺服器的串連數增加,也能發揮O(1)的效能。 memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等作業系統上發揮其高效能。
由於memcached和libevent是由C編寫的,所以首先確保你的系統安裝了gcc,如果
沒有安裝,使用yum安裝即可
命令:
yum -y install gcc
yum -y install gcc
然後下載Libevent
然後上傳centos到/usr/local,進行給予許可權,然後解壓
# tar xzvf libevent-2.0.21-stable.tar.gz ##解壓
# cd libevent-2.0.21-stable
# ./configure --prefix=/usr
# make
# make install
然後下載 memcache 上傳
# tar xzvf memcached-1.4.15.tar.gz
# cd memcached-1.4.15
# ./configure --with-libevent=/usr
# make
# make install
關於memcache啟動的一些參數說明:
memcached命令參數解釋:
-p <num> 監聽的連接埠
-l <ip_addr> 串連的IP地址, 預設是本機
-d start 啟動memcached 服務
-d restart 重起memcached 服務
-d stop|shutdown 關閉正在啟動並執行memcached 服務
-d install 安裝memcached 服務
-d uninstall 卸載memcached 服務
-u <username> 以<username>的身份運行 (僅在以root啟動並執行時候有效)
-m <num> 最大記憶體使用量,單位MB。預設64MB
-M 記憶體耗盡時返回錯誤,而不是刪除項
-c <num> 最大同時串連數,預設是1024
-f <factor> 塊大小增長因子,預設是1.25
-n <bytes> 最小分配空間,key+value+flags預設是48
-h 顯示協助
然後執行命令啟動memcached
#/usr/local/bin/memcached -d -m 1024 -u root -p 11211 -P /tmp/memcached.pid
然後就可以使用telnet,來測試memcache的串連狀態,
如果沒有安裝telnet服務,可以執行
yum install telnet-server
安裝服務
yum install telnet
安裝命令
然後編輯vi /etc/xinetd.d/telnet 檔案,啟用telnet,預設是禁用的,截圖如下:
然後重啟服務,執行命令 service xinetd restart
然後就可以測試memcached的串連,執行命令
telnet 127.0.0.1 11211
輸入stats,會輸出memcache的一些串連資訊,包括PID
如果需要退出,則執行quit命令即可,截圖如下:
退出telnet,執行quit命令即可,上圖所示的memcached進程ID,很重要,如果我們需要關閉memcached服務時,就可以執行命令,kill -9 進程號 即可。
在使用java代碼測試前先禁用防火牆 service iptables stop
package com.able.java;import java.net.InetSocketAddress;import net.spy.memcached.MemcachedClient;import org.junit.Test;public class MemcacheTest {@Testpublic void test() throws Exception{MemcachedClient memcachedClient=new MemcachedClient(new InetSocketAddress("192.168.40.234",11211));memcachedClient.set("test", 60,"宇智波鼬" );Object object=memcachedClient.get("test");System.out.println(object.toString());}}
2015-03-16 17:00:14.153 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/192.168.40.234:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2015-03-16 17:00:14.153 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@5fdba6f9
宇智波鼬