ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-30 17:38:50  阅读:296  来源: 互联网

标签:memcached php 运维 0.0 企业级 LNMPserver1 memcache PHP root


文章目录

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
  • (4) php的配置文件中添加memcache模块
[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  
  • (7)将测试文件cp到/usr/local/lnmp/nginx/html,设置memcached的密码
[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加速明显各方面优化了。
在这里插入图片描述
在这里插入图片描述

标签:memcached,php,运维,0.0,企业级,LNMPserver1,memcache,PHP,root
来源: https://blog.csdn.net/weixin_38044888/article/details/97395685

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有