Memcache是一個自由和開放源代碼、高性能的內存對象緩存系統。用於加速動態web應用程序,減輕數據庫負載。它能夠應對任意多個鏈接,使用非阻塞的網絡IO。因爲它的工做機制是在內存中開闢一塊空間,而後創建一個Hash表,Memcached自管理這些Hash表。
Memcached簡單而強大,它簡單的設計促進迅速部署,易於發展所面臨的問題,解決了不少大型數據緩存。它的API適配各類最流行的語言。
Memcache官方網站:http://memcached.org/
memcache 具備如下的特色:
1)協議簡單:memcached的服務器客戶端通訊並不使用複雜的XML等格式,而使用簡單的基於文本行的協議。所以,經過telnet也能在memcached上保存數據、取得數據。
2)基於libevent的事件處理:libevent是個程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能封裝成統一的接口。即便對服務器的鏈接數增長,也能發揮O(1)的性能。memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。
3)內置內存存儲方式:爲了提升性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。因爲數據僅存在於內存中,所以重啓memcached、重啓操做系統會致使所有數據消失。另外,內容容量達到指定值以後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached自己是爲緩存而設計的服務器,所以並無過多考慮數據的永久性問題。
4)memcached不互相通訊的分佈式:memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。各個memcached不會互相通訊以共享信息。那麼,分佈式是徹底取決於客戶端的實現。git
memcached怎麼工做
Memcached就像一個巨大的、存儲了不少<key,value>對的哈希表。經過key,能夠存儲或查詢任意的數據。
客戶端能夠把數據存儲在多臺memcached上。當查詢數據時,客戶端首先參考節點列表計算出key的哈希值(階段一哈 希),進而選中一個節點;客戶端將請求發送給選中的節點,而後memcached節點經過一個內部的哈希算法(階段二哈希),查找真正的數據 (item)。 github
centos6.5 x86_64下編譯安裝web
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz算法
tar xzvf libevent-2.0.22-stable.tar.gz數據庫
cd libevent-2.0.22-stablecentos
./configure --prefix=/usr/local/libevent緩存
make && make installbash
wget https://memcached.org/files/memcached-1.4.38.tar.gz服務器
tar zxvf memcached-1.4.38.tar.gz網絡
cd memcached-1.4.38
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
vi memcached
#!/bin/bash
# description: Start and stop the Memcached services.
# pidfile: /tmp/memcached1.pid
# config: /usr/local/memcached
# chkconfig: - 55 45
# source function library
. /etc/rc.d/init.d/functions
memcached="/usr/local/memcached/bin/memcached"
[ -e $memcached ] || exit 1
start()
{
echo "Starting memcached:"
daemon $memcached -d -m 1000 -u root -l 127.0.0.1 -p 11211 -c 1500 -P /tmp/memcached1.pid
}
stop()
{
echo "Shutting down memcached"
killproc memcached
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
chmod +x memcached
cp memcached /etc/init.d/memcached
chkconfig --add memcached
chkconfig --level 35 memcached on
service memcached start