lnmp架构部署请查看我前面的博文:https://blog.csdn.net/weixin_43287982/article/details/87806322
一、MemCache
-
简介:
-
memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负担。
-
memcache通过在内存里维护一个统一的巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
-
memcache是一种内存缓存技术,是一种缓存手段,要看情况来使用。
-
对于频繁读取,每次读取重复率高,数据更新频度低的数据,用memcache可以优化你的系统响应速度。
-
MemCache的工作流程如下:
-
检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作。
-
如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现)。
-
每次更新数据库的同时更新memcached中的数据,保证一致性。
-
分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
-
memcache使用场景:
-
访问频繁的字典数据
-
大量的hot数据
-
页面缓存
-
频繁的查询条件和结果
-
临时处理的数据
二、MemCache对PHP页面的缓存加速优化,配置过程详解
- 解压memcache源码包:
[root@server1 ~]# tar zxf memcache-2.2.5.tgz
- 将前边php编译完成的二进制命令加入环境变量中,保证可以直接调用php命令
[root@server1 ~]# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
[root@server1 ~]# source ~/.bash_profile
- 创建一个预编译环境并进行编译汇编memcache源码包
- phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize。
- phpize工具是在php安装目录下,基于这点phpize对应了当时的php环境,所以是要根据该php的配置情况生成对应的configure文件,建立一个configure文件。必须在一个目录下去运行phpize,那么phpize就知道你的的环境是哪个目录,并且configure文件建立在该目录下。
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@server1 memcache-2.2.5]# ./configure
[root@server1 memcache-2.2.5]# make && make install
- php的配置文件中添加memcache模块
[root@server1 etc]# pwd
/usr/local/lnmp/php/etc
[root@server1 etc]# vim php.ini
873 extension=memcache.so # 将873行memcache模块的注释打开
[root@server1 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm done
[root@server1 etc]# /etc/init.d/php-fpm status
php-fpm (pid 3857) is running...
[root@server1 etc]# php -m | grep memcache
memcache
[root@server1 etc]# php -m | grep mysql
mysql
mysqli
mysqlnd
pdo_mysql
在这里注意837行的内容,去掉注释,看是不是memcache的模块,也有可能写的别的模块,一定要注意,这里还要注意的是如果配置文件写错,reload的时候是不会报错的,只有在restart的时候才会报错,这个是我出现的错误
- 安装memcache工具并启动memcache
[root@server1 etc]# yum install -y memcached
[root@server1 etc]# /etc/init.d/memcached start
Starting memcached: [ OK ]
[root@server1 etc]# netstat -atnlp ##查看监听端口(11211端口)
刚才我们显示检测所有的11211端口的所有主机,如果之想监听本机的,可以修改其配置文件/etc/sysconfig/memcached中的OPTIONS="-l 127.0.0.1",如果是实验环境我们可以只监听自己但是在生产环境这样做是不合理的,如果修改了,记得重启服务
- 将测试文件cp到/usr/local/lnmp/nginx/html,设置memcached的密码
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php example.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim memcache.php
define('ADMIN_USERNAME','memcache'); // Admin Username ##用户为memcache
define('ADMIN_PASSWORD','westos'); // Admin Password ##用户为memcache
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
$MEMCACHE_SERVERS[] = '172.25.254.1:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
这里应该把最后一行注释了,我们这里只有一个服务器,不是分布式的系统服务配置,不然网站访问不到,图在最后
- 安装telnet
[root@server1 etc]# yum install telnet -y
## telnet命令可以查看端口是否开启,招商银行信用卡2019笔试题
- 浏览器输入:172.2.79.1/memcache.php
测试这出问题的话,请看最后面的可能会出现的错误
- 登录帐号
- 然后重新打开一个浏览器页面,输入172.2.79.1/example.php ,不断刷新
- 当访问多次example.php后,查看命中情况会不断提高,最后将会达到百分之百。 如下图:
- 压力测试:加速页面example.php和没加速index.php的对比(错误率对比,相应时间对比)
[root@foundation60 Desktop]# ab -c 10 -n 5000 http://172.25.254.1/index.php
[root@foundation60 Desktop]# ab -c 10 -n 5000 http://172.25.254.1/example.php
## 如果没有ab这个命令安装httpd-tools这个服务即可
注意:如果memcache.php的发布文件没有改正确,网站打开的时候是不会出现图形的,服务器有几个,对应的IP就有几个,不然就会出现下图这个结果
有空更新memcache的分布式