微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

企业级运维——使用MemCached实现对PHP页面的缓存加速优化

文章目录

MemCahced原理

原理参考:

在实际使用中,通常把数据库查询的结果保存到Memcache中,下次访问时直接从memcache中读取,而不再进行数据库查询操作,这样就在很大程度上减少了数据库的负担。

保存在memcache中的对象实际放置在内存中,这也是memcache如此高效的原因。

在这里插入图片描述


memcache使用多路复用I/O模型,如(epoll, select等),传统I/O中,系统可能会因为某个用户连接还没做好I/O准备而一直等待,知道这个连接做好I/O准备。这时如果有其他用户连接到服务器,很可能会因为系统阻塞而得不到响应。

而多路复用I/O是一种消息通知模式,用户连接做好I/O准备后,系统会通知我们这个连接可以进行I/O操作,这样就不会阻塞在某个用户连接。因此,memcache才能支持高并发。

此外,memcache使用了多线程机制。可以同时处理多个请求。线程数一般设置为cpu核数,效率最高。

MemCache缓存加速的部署

  • (1)下载并解压压缩包
tar zxf memcache-2.2.5.tgz 
  • (2)将LNMP架构中的PHP命令加入到环境变量中
vim ~/.bash_profile 

在这里插入图片描述

source ~/.bash_profile
  • (3)创建一个预编译环境并进行编译安装memcache源码包
    • PHPize是用来扩展PHP扩展模块的,通过PHPize可以建立PHP的外挂模块,比如你想在原来编译好的PHP中加入memcached或者ImageMagick等扩展模块,可以使用PHPize。
    • PHPize工具是在PHP安装目录下,基于这点PHPize对应了当时的PHP环境,所以是要根据该PHP的配置情况生成对应的configure文件,建立一个configure文件。必须在一个目录下去运行PHPize,那么PHPize就知道你的的环境是哪个目录,并且configure文件建立在该目录下。
[root@LNMPserver1 memcache-2.2.5]# PHPize 
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@LNMPserver1 memcache-2.2.5]# ls
acinclude.m4    config.sub    Makefile.global             memcache_standard_hash.c
aclocal.m4      configure     memcache.c                  missing
autom4te.cache  configure.in  memcache_consistent_hash.c  mkinstalldirs
build           config.w32    memcache.dsp                PHP_memcache.h
config9.m4      CREDITS       memcache.PHP                README
config.guess    example.PHP   memcache_queue.c            run-tests.PHP
config.h.in     install-sh    memcache_queue.h
config.m4       ltmain.sh     memcache_session.c
[root@LNMPserver1 memcache-2.2.5]# ./configure 
[root@LNMPserver1 memcache-2.2.5]# make && make install
[root@LNMPserver1 PHP-5.6.35]# cp PHP.ini-production /usr/local/lnmp/PHP/etc/PHP.ini
[root@LNMPserver1 PHP-5.6.35]# cd -
/usr/local/lnmp/PHP/etc
[root@LNMPserver1 etc]# ls
pear.conf  PHP-fpm.conf  PHP-fpm.conf.default  PHP.ini
[root@LNMPserver1 etc]# vim PHP.ini 

添加memcache模块:

在这里插入图片描述

[root@LNMPserver1 etc]# /etc/init.d/PHP-fpm reload
Reload service PHP-fpm  done
[root@LNMPserver1 etc]# PHP -m | grep mem
memcache
  • (5)安装memcache工具并启动memcache
yum install -y memcached
[root@LNMPserver1 etc]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]
[root@LNMPserver1 etc]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      6775/memcached      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5068/Nginx          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5089/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      962/master          
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6748/PHP-fpm        
tcp        0      0 :::11211                    :::*                        LISTEN      6775/memcached      
tcp        0      0 :::22                       :::*                        LISTEN      5089/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      962/master          
tcp        0      0 :::3306                     :::*                        LISTEN      31925/MysqLd 
  • (6)我们为了实验效果,这里只设置监听本机。所以,需要编辑其配置文件/etc/sysconfig/memcached

在这里插入图片描述


可以重启服务查看端口是否改变。

[root@LNMPserver1 etc]# /etc/init.d/memcached restart
Stopping memcached:                                        [  OK  ]
Starting memcached:                                        [  OK  ]
[root@LNMPserver1 etc]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:11211             0.0.0.0:*                   LISTEN      6793/memcached      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5068/Nginx          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5089/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      962/master          
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6748/PHP-fpm        
tcp        0      0 :::22                       :::*                        LISTEN      5089/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      962/master          
tcp        0      0 :::3306                     :::*                        LISTEN      31925/MysqLd  
[root@LNMPserver1 etc]# cd ~/memcache-2.2.5
[root@LNMPserver1 memcache-2.2.5]# cp memcache.PHP example.PHP  /usr/local/lnmp/Nginx/html/
[root@LNMPserver1 memcache-2.2.5]# cd /usr/local/lnmp/Nginx/html/
[root@LNMPserver1 html]# vim   memcache.PHP

在这里插入图片描述

这里应该把最后一行注释了,我们这里只有一个服务器,不是分布式的系统服务配置,不然网站访问不到,图在最后

  • (8)安装telnet,测试端口是否开启。
yum install telnet -y
telnet  IP 端口

在这里插入图片描述

  • (9)浏览器输入:172.25.66.1/memcache.PHP,输入刚刚设置的帐号密码

    在这里插入图片描述


    但是发现出错了!

    在这里插入图片描述


    分析原因,这是因为我之前在memcached的配置文件/etc/sysconfig/memcached中,设置了只监听本机,所以其他主机登陆时会拒绝。

    在这里插入图片描述

[root@LNMPserver1 html]# vim /etc/sysconfig/memcached 
[root@LNMPserver1 html]# /etc/init.d/memcached reload
Stopping memcached:                                        [  OK  ]
Starting memcached:                                        [  OK  ]

再次访问,成功:

在这里插入图片描述

  • (10)然后重新打开一个浏览器页面,输入172.25.66.1/example.PHP ,不断刷新
    当访问多次example.PHP后,查看命中情况会不断提高,最后将会达到百分之百。 如下图:

    在这里插入图片描述


    这是因为我们在example.PHP文件里写明了调用memcache的接口,所有访问都会经过memcache模块,而这里的memcache.PHP刚好是检测是否命中缓存,或者说是是否通过memcache的缓存访问。

压力测试:对比memcache缓存加速效果

  • 对比对象:加速页面example.PHP和没加速index.PHP的对比(错误率对比,响应时间对比)
  • 首先,如果没有ab这个命令,安装httpd-tools这个服务即可。
  • 进行并发量为10的2000次请求,对比:
 ab -c 10 -n 2000 http://172.25.66.1/index.PHP
 ab -c 10 -n 2000 http://172.25.66.1/example.PHP

可以明显的发现响应速度的不同,仔细观测其错误率和响应时间,发现使用memcache加速明显各方面优化了。

在这里插入图片描述


在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐