工作原理:
①客戶端第一次訪問應用程序時,會到數據庫(RDBMS)中取出數據,返回給客戶端;同時也將取出的數據保存到memcached中。
② 第二次訪問時,因爲數據已經緩存,不不用去數據庫查詢了,直接從memcached取。
那麼memcached的快速和高效率是如何體現出來的呢?我們都清楚,RDBMS是文件型的數據庫,最終還是以文件的形式保存在磁盤上。而memcached則不一樣,它是key:value關係型的數據庫,是保存在內存中的。那麼就不用我再做說明了,內存的讀寫速度要比磁盤的讀寫速度快得多,前者是後者的10的6次方倍。http://blog.rekfan.com/?p=172
③memcached是基於libevent的事件處理。libevent是個程序庫,它將Linux的epoll、BSD類操作系統的kqueue等事件處理功能封裝成統一的接口。即使對服務器的連接數增加,也能發揮O(1)的性能。 memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統上發揮其高性能。關於事件處理這裏就不再詳細介紹,可以參考Dan Kegel的The C10K Problem。欲瞭解更更多關於libevent:http://monkey.org/~provos/libevent/
前提:
下載:
1. libevent
2.
memcached
由於memcached和libevent是由C編寫的,所以首先確保你的系統安裝了gcc,如果
沒有安裝,使用yum安裝即可
命令:
yum -y install gcc
yum -y install gcc-c++
安裝Memcached步驟:
1.編譯安裝Libevent
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz //下載
tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent/
make
make install
ln -s /usr/local/libevent/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5
2.安裝Memcache
wget http://memcached.org/files/memcached-1.4.21.tar.gz //下載
tar -zxvf memcached-1.4.21.tar.gz
cd memcached-1.4.21
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
make
make install
3.編寫memcached服務啓停腳本
cd /etc/init.d
vi memcached
腳本內容如下:
#!/bin/sh
#
# Startup script for the server of memcached
#http://blog.rekfan.com/?p=172
# processname: memcached
# pidfile: /usr/local/memcached/memcached.pid
# logfile: /usr/local/memcached/memcached_log.txt
# memcached_home: /etc/memcached
# chkconfig: 35 21 79
# description: Start and stop memcached Service
# Source function library
. /etc/rc.d/init.d/functions
RETVAL=0
prog="memcached"
basedir=/usr/local/memcached
cmd=${basedir}/bin/memcached
pidfile="$basedir/${prog}.pid"
#logfile="$basedir/memcached_log.txt"
# 設置memcached啓動參數
ipaddr="172.16.3.129" # 綁定偵聽的IP地址
port="11211" # 服務端口
username="root" # 運行程序的用戶身份
max_memory=64 # default: 64M | 最大使用內存
max_simul_conn=1024 # default: 1024 | 最大同時連接數
#maxcon=51200
#growth_factor=1.3 # default: 1.25 | 塊大小增長因子
#thread_num=6 # default: 4
#verbose="-vv" # 查看詳細啓動信息
#bind_protocol=binary # ascii, binary, or auto (default)
start() {
echo -n $"Starting service: $prog"
$cmd -d -m $max_memory -u $username -l $ipaddr -p $port -c $max_simul_conn -P $pidfile
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
echo -n $"Stopping service: $prog "
run_user=`whoami`
pidlist=`ps -ef | grep $run_user | grep memcached | grep -v grep | awk '{print($2)}'`
for pid in $pidlist
do
# echo "pid=$pid"
kill -9 $pid
if [ $? -ne 0 ]; then
return 1
fi
done
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
#reload)
# reload
# ;;
restart)
stop
start
;;
#condrestart)
# if [ -f /var/lock/subsys/$prog ]; then
# stop
# start
# fi
# ;;
status)
status memcached
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
chmod +x memcached
chkconfig --add memcached
chkconfig --level 35 memcached on
5.設置防火牆
vi /etc/sysconfig/iptables
將下面這行加入進去
-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT
注:將memcached加入到防火牆允許訪問規則中
service iptables restart
注:防火牆重啓
6.啓動memcached
service memcached start
//啓動的時候實際上是調用了下面的這個命令,以守護進程的方式來啓動memcached
/usr/local/memcached/bin/memcached -d -m 64 -u root -l 172.16.3.129 -p 11211 -c 1024 -P /usr/local/memcached/memcached.pid
7.查看memcached是否啓動:
ps -ef | grep memcached
8.memcached命令參數解釋
9.使用telnet,來測試memcache的連接狀態
安裝telnet:http://jingyan.baidu.com/article/3c48dd34709e70e10be35835.html
10.測試
參考來自: