基本原理:
 

客户端第一次访问应用程序时,会到数据库(RDBMS)中取出数据,返回给客户端;同时也将取出的数据保存到memcached中。

第二次访问时,因为数据已经缓存,就不用去数据库查询了,直接从memcached中取。

RDBMS是文件型的数据库,最终还是以文件的形式保存在磁盘上;而memcached则不一样,它是key:value关系型的数据库,是保存在内存中的。内存的读写速度要比磁盘的读写速度快得多,前者是后者的106次方倍。

memcached是基于libevent的事件处理。libevent是个程序库,它将LinuxepollBSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在LinuxBSDSolaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan KegelThe C10K Problem。欲了解更多关于libeventhttp://monkey.org/~provos/libevent/ 

 
 
编译安装 Memcached
 

1、由于memcached是基于libevent的,因此需要安装libeventlibevent-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/functions 
 
RETVAL=0 
 
prog="memcached" 
basedir=/etc/memcached 
cmd=${basedir}/bin/memcached 
pidfile="$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 $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 
 
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测试页面查看