基本原理:
① 用戶端第一次訪問應用程式時,會到資料庫(RDBMS)中取出資料,返回給用戶端;同時也將取出的資料儲存到memcached中。
② 第二次訪問時,因為資料已經緩衝,就不用去資料庫查詢了,直接從memcached中取。
RDBMS是檔案型的資料庫,最終還是以檔案的形式儲存在磁碟上;而memcached則不一樣,它是key:value關係型的資料庫,是儲存在記憶體中的。記憶體的讀寫速度要比磁碟的讀寫速度快得多,前者是後者的10的6次方倍。
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/ 。
編譯安裝Memcached
1、由於memcached是基於libevent的,因此需要安裝libevent,libevent-devel
# yum install libevent libevent-devel -y
2、下載並解壓memcached-1.4.6.tar.gz
memcached官方網站是:http://memcached.org/
# tar -xvzf memcached-1.4.6.tar.gz
3、編譯安裝memcached-1.4.6
# cd memcached-1.4.6
# ./configure --prefix=/etc/memcached
# make
# make install
4、配置環境變數(這一步可忽略...)
進入使用者宿主目錄,編輯.bash_profile,為系統內容變數LD_LIBRARY_PATH增加新的目錄,需要增加的內容如下:
# vi .bash_profile
MEMCACHED_HOME=/etc/memcached
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib
重新整理使用者環境變數:# source .bash_profile
5、編寫memcached服務啟停指令碼
# cd /etc/init.d
vi memcached,指令碼內容如下:
#!/bin/sh## Startup script for the server of memcached## processname: memcached# pidfile: /etc/memcached/memcached.pid# logfile: /etc/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/functionsRETVAL=0prog="memcached"basedir=/etc/memcachedcmd=${basedir}/bin/memcachedpidfile="$basedir/${prog}.pid"#logfile="$basedir/memcached_log.txt"ipaddr="192.168.1.200" # 綁定偵聽的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 $pidfileRETVAL=$?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 $pidlistdo# echo "pid=$pid"kill -9 $pidif [ $? -ne 0 ]; thenreturn 1fidoneRETVAL=$?echo[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog}# See how we were called.case "$1" instart)start;;stop)stop;;#reload)#reload#;;restart)stopstart;;#condrestart)#if [ -f /var/lock/subsys/$prog ]; then#stop#start#fi#;;status)status memcached;;*)echo "Usage: $0 {start|stop|restart|status}"exit 1esacexit $RETVAL
6、賦予執行許可權
#chmod +x memcached
7、設定memcached隨系統啟動
# chkconfig --add memcached
# chkconfig --level 35 memcached on
啟動memcached
# service memcached start
//啟動的時候實際上是調用了下面的這個命令,以守護進程的方式來啟動memcached
/etc/memcached/bin/memcached -d -m 64 -u root -l 192.168.1.201 \
-p 11211 -c 1024 -P /etc/memcached/memcached.pid
查看memcached是否啟動
# ps -ef | grep memcached
安裝Memcache的PHP擴充
1.在http://pecl.php.net/package/memcache 選擇相應想要下載的memcache版本。
2.安裝PHP的memcache擴充
tar vxzf memcache-2.2.5.tgz
cd memcache-2.2.5
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
make
make install
3.上述安裝完後會有類似這樣的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
4.把php.ini中的extension_dir = “./”修改為
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”
5.添加一行來載入memcache擴充:extension=memcache.so
接下來重啟php就可以了,可以通過phpinfo測試頁面查看