标签:memcached php 运维 0.0 企业级 LNMPserver1 memcache PHP root
文章目录
MemCahced原理
原理参考:
- https://www.cnblogs.com/WuNaiHuaLuo/p/5225330.html
- https://blog.csdn.net/wusuopuBUPT/article/details/18238003
在实际使用中,通常把数据库查询的结果保存到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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。