文章目录
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源码包
[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
可以重启服务查看端口是否改变。
[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] 举报,一经查实,本站将立刻删除。