企业级lnmp架构讲解(四)使用memcache对php页面的缓存进行优化+ab命令的用法

在之前搭建的lnmp架构中,nginx没有办法解析动态的内容,必须通过fastcgi调用外部的php,如果是静态资源,php直接运行代码,返回给用户,如果是动态资源,php连接数据库。再把结果返回给nginx.

试想一下,同一个php的页面,用户访问了很多次,那么就得通过fastcgi在php的解释器里运行很多次,但每次的结果是相同的。

我们可以只运行一次,但是将结果放在一个地方存储,等下一次相同的请求来临时,可以将事先存储的结果直接返回给nginx,不需要再通过php解析一次。

我们可以使用memcache存储php的执行结果。

memcache是什么

MemCache是一个自由、源码开放、高性能、分布式的内存对象缓存系统,用于动态Web应用以减轻数据库的负载。

它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度

MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储

MemCache虽然被称为"分布式缓存",但是MemCache本身完全不具备分布式的功能,MemCache集群之间不会相互通信
(与之形成对比的,比如JBoss Cache,某台服务器有缓存数据更新时,会通知集群中其他机器更新缓存或清除缓存数据)
所谓的"分布式",完全依赖于客户端程序的实现

为什么使用memcache

在这里插入图片描述

memcache和memcached的区别

1)MemCache是项目的名称
(2)MemCached是MemCache服务器端可以执行文件的名称

memcache的工作步骤

1.客户端把请求先发送给代理服务器(一般是nginx)

2.先检查客户端的请求数据是否在memcached中,如有,
直接把请求数据返回,不再对数据库进行任何操作

3.如果请求的数据不在memcached中,就去查数据库,
把从数据库中获取的数据返回给客户端
同时把数据缓存一份到memcached中(memcached客户端不负责,
需要程序明确实现)

4.每次更新数据库的同时更新memcached中的数据,保证一致性

5.当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

memcache+php的实现步骤

实验背景
在lnmp架构搭建成功的基础上

虚拟机server1(172.25.8.1) 	lnmp架构
真机	172.25.8.250 测试

在serevr1中,php增加memcache模块

1.将之前PHP编译完成的二进制命令加入到环境变量中,可以直接调用PHP命令

vim ~/.bash_profile 将php命令加入环境变量的配置文件当中,
也可以加入mysql命令
source ~/.bash_profile 使其生效

在这里插入图片描述在这里插入图片描述在这里插入图片描述
2.memcache目录中本来没有configure目录,没有直接编译,我们需要第三方去编译它

解压好memcache,进入目录,发现本来没有configure
在这里插入图片描述安装时如果提示没有phpize,就根据报错下载autoconf
在这里插入图片描述3.编译安装memcache
在这里插入图片描述
在这里插入图片描述4.修改php主配置文件,增加两个模块

vim /usr/local/lnmp/php/etc/php.ini 
将memcache缓存模块与php连接起来
加入 搜索extension_dir 在700多行 添加目录是安装memcache模块后生成的东西

加入: extension=memcache.so(这个模块以插件的形式运行)

在这里插入图片描述在这里插入图片描述在这里插入图片描述4.重新加载php-fpm服务

etc/init.d/php-fpm reload重启php服务
php -m | grep memcache可以看到这个模块已经加入到php中
php -m | grep mysql可以看到数据库也与mysql关联

在这里插入图片描述此时,php已经支持memcache模块了,可以安装memcached了

5.安装memcached
在这里插入图片描述6.查看memcache的配置文件

它的端口是11211

在这里插入图片描述在这里插入图片描述127.0.0.1表示只监听本机端口
在这里插入图片描述7.启动memcached
在这里插入图片描述8.测试memcache在内存中的工作过程
安装telnet工具

在这里插入图片描述telnet localhost 11211使用这个连接本地的端口,存数据
在这里插入图片描述在这里插入图片描述在这里插入图片描述9.此时我们需要将php与memcahe结合起来,告诉php在执行第一遍时,应该把结果保存在memcached里,下一次同样的结果只需要去memcached里拿就好

在这里我们用memcached 的测试页面

cp memcache.php  example.php /usr/local/lnmp/nginx/html/放到默认发布目录下
cd /usr/local/lnmp/nginx/html/

在这里插入图片描述
在这里插入图片描述vim memcache.php (这个文件可以监控memcache是否被正确的调度)

这里只有一个memcache(本机ip),注释掉多余的
在这里插入图片描述10.浏览器测试

浏览器访问http://172.25.8.1/memcache.php 要输入用户和密码,可以看到现在命中率33.3%

在这里插入图片描述复制自带的example.php测试页面到nginx中
文件里面自己定义了要求php当相同请求访问时去加载memcache读取内存中的内容

在这里插入图片描述11.真机ab命令测试
安装ab命令,压力测试,模拟5000请求量

(1)测试没有用memcache的index.php,发现速度很慢
在这里插入图片描述在这里插入图片描述(2)访问example.php 没有失败而且时间大大减少
在这里插入图片描述在这里插入图片描述

-c 10表示并发用户数为10
-n 5000表示请求总数为5000
http://…/index.php表示请求的目标URL
表示同时处理5000个请求并运行10次index.php文件

ab命令的用法

ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。

ab是apachebench命令的缩写。

ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

参数:

-n  在测试会话中所执行的请求个数。默认时,仅执行一个请求。

-c  一次产生的请求个数。默认是一次一个。

-t  测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

-p  包含了需要POST的数据的文件。

-P  对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(, 是否发送了401认证需求代码),此字符串都会被发送。

-T  POST数据所使用的Content-type头信息。

-v  设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200),2或更大值可以显示警告和其他信息。

-V  显示版本号并退出。

-w  以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

-i  执行HEAD请求,而不是GET。

-x  设置<table>属性的字符串。

-X  对请求使用代理服务器。

-y  设置<tr>属性的字符串。

-z  设置<td>属性的字符串。

-C  对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。

-H  对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(,"Accept-Encoding:zip/zop;8bit")-A  对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(,是否发送了401认证需求代码),此字符串都会被发送。

-h  显示使用方法。

-d  不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)-e  产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(1%100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。

-g  把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。

-i  执行HEAD请求,而不是GET。

-k  启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。

-q  如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
发布了264 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45649763/article/details/104593244