一、概念讲解
- 简介:
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布。
- 1.memcache是一个高性能的分布式的内存对象缓存系统,用于动态web应用以减轻数据库负担
- 2.memcache通过在内存里维护一个统一的巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
- 3.memcache是一种内存缓存技术,是一种缓存手段,要看情况使用
- 对于频繁读取,每次读取重复率高,数据更新频度低的数据,用memcache可以优化系统响应速度
- memcache和memcached的区别:
memcache时这个项目的名称,而memcached是它服务端的主程序文件名
- mamcache的使用场景:
访问频繁的字典数据,大量的hot数据,页面缓存,频繁的查询条件和结果,临时处理的数据
- memcache的工作流程如下:
- (1)检查客户端的请求数据是否存在,memcached中,如果有请求的数据,直接把请求的数据返回,不再对数据库进行任何操作,路径为:①②③⑦,client->web/app+memcache client->memcache->web/app+memcache client->client
- (2)如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给数据库,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),①②④⑤⑦⑥,client->web/app+memcache
client->memcache->DB->web/app+memcache client->client - (3)每次更新数据库的同时更新memcached中的数据,保证一致性
- (4)当分配给memcache内容空间用完后,会使用LRU策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据
LRU简介:
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
二、MemCache对PHP页面的缓存加速优化,配置过程详解
注意:这个实验是在前面LNMP结构搭建好的基础上面完成的
第一步:解压memcache源码包(源码包可以从网上下载)与编辑环境变量:
[root@hang1 install]# cd /mnt
[root@hang1 mnt]# ls
cmake-2.8.12.2-4.el6.x86_64.rpm memcache-2.2.5.tgz mysql-boost-5.7.17.tar.gz
Discuz_X3.2_SC_UTF8.zip mysql-5.7.17
[root@hang1 mnt]# tar zxf memcache-2.2.5.tgz
[root@hang1 mnt]# cd memcache-2.2.5
[root@hang1 memcache-2.2.5]# ls
将前边php编译完成的二进制命令加入环境变量中,保证可以直接调用php命令
[root@hang1 memcache-2.2.5]# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
[root@hang1 memcache-2.2.5]# source ~/.bash_profile
- phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize。
- phpize工具是在php安装目录下,基于这点phpize对应了当时的php环境,所以是要根据该php的配置情况生成对应的configure文件,从而建立一个configure文件。必须在一个目录下去运行phpize,那么phpize就知道你的的环境是哪个目录,并且configure文件建立在该目录下。
第二步:创建一个预编译环境并进行编译汇编并且在php里面添加memcache模块
[root@hang1 memcache-2.2.5]# ./configure #源码编译,已经安装好了php,我们就不用再指定新的php扩展模块路径
[root@hang1 memcache-2.2.5]# make && make install
在php的配置文件中添加memcache模块
[root@hang1 memcache-2.2.5]# vim /usr/local/lnmp/php/etc/php.ini
编辑文件如下所示:
extension=memcache.so
root@hang1 memcache-2.2.5]# cd modules/
[root@hang1 modules]# ls
memcache.so
[root@hang1 modules]# /etc/init.d/php-fpm reload #重启服务
Reload service php-fpm done
[root@hang1 ~]# php -m | grep memcache ##过滤memcache模块,发现已经有了这个模块
memcache
[root@hang1 ~]# php -m | grep mysql ##同时支持mysql
mysql
mysqli
mysqlnd
pdo_mysql
第三步:安装memcache工具并启动memcache
[root@hang1 ~]# yum install -y memcached
[root@hang1 ~]# rpm -qa | grep memcache
[root@hang1 ~]# rpm -ql memcached-1.4.4-3.el6.x86_64
[root@hang1 ~]# vim /etc/sysconfig/memcached #此步不用做什么操作,只是查看一下,默认显示检测所有11211端口的所有主机
[root@hang1 ~]# /etc/init.d/memcached start
[root@hang1 ~]# netstat -tnlp ##查看监听端口(11211端口)
==显示检测所有11211端口的所有主机,如果想只监控本机则进行修改OPTIONS="-l 127.0.0.1" ==
第四步:安装telnet
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
telnet的主要用途就是使用远程计算机上所拥有的本地计算机没有的信息资源,如果远程的主要目的是在本地计算机与远程计算机之间传递文件,那么相比而言使用FTP会更加快捷有效。
交互过程:
当我们使用Telnet登录进入远程计算机系统时,事实上启动了两个程序:一个是Telnet客户程序,运行在本地主机上;另一个是Telnet服务器程序,它运行在要登录的远程计算机上。
- 本地主机上的Telnet客户程序主要完成以下功能:
建立与远程服务器的TCP联接。
从键盘上接收本地输入的字符。
将输入的字符串变成标准格式并传送给远程服务器。
从远程服务器接收输出的信息。
将该信息显示在本地主机屏幕上。
- 远程主机的“服务”程序通常被昵称为“精灵”,它平时不声不响地守候在远程主机上,一接到本地主机的请求,就会立马活跃起来,并完成以下功能:
通知本地主机,远程主机已经准备好了。
等候本地主机输入命令。
对本地主机的命令作出反应(如显示目录内容,或执行某个程序等)。
把执行命令的结果送回本地计算机显示。
重新等候本地主机的命令。
第五步:将测试文件cp到nginx的默认发布文件,设置memcached的密码
[root@hang1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/
[root@hang1 memcache-2.2.5]# vim /usr/local/lnmp/nginx/html/memcache.php
define('ADMIN_USERNAME','mengmeng'); // Admin Username
define('ADMIN_PASSWORD','redhat'); // Admin Password
$MEMCACHE_SERVERS[] = '172.25.11.1:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
第六步:浏览器登陆
[root@hang1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
然后重新打开一个浏览器页面,输入172.2.79.1:example.php ,不断刷新
第七步:压力测试加速页面example.php和没加速index.php的对比(错误率对比,相应时间对比)
加速:
[kiosk@foundation11 Desktop]$ ab -c 10 -n 5000 http://172.25.11.1/example.php
没加速
[kiosk@foundation11 Desktop]$ ab -c 10 -n 5000 http://172.25.11.1/index.php
总结:我们可以看到加速的命中没失败的,时间也只有5秒多,而没加速的时间28秒多,而且失败494个命中,从而说明MemCache实现php页面访问速度与命中率的提高