MemCache分布式交叉存储——实现php页面访问速度与命中率的提高(缓存加速优化)

本文介绍了MemCache作为高性能分布式内存缓存系统,用于优化PHP页面访问速度。通过详细步骤解释了如何配置和使用MemCache,包括检查数据存在、从数据库获取数据并缓存、数据更新同步以及LRU策略。实验证明,MemCache能显著提高页面访问速度和命中率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念讲解

  • 简介:

memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布。

  • 1.memcache是一个高性能的分布式的内存对象缓存系统,用于动态web应用以减轻数据库负担
  • 2.memcache通过在内存里维护一个统一的巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
  • 3.memcache是一种内存缓存技术,是一种缓存手段,要看情况使用
  • 对于频繁读取,每次读取重复率高,数据更新频度低的数据,用memcache可以优化系统响应速度
  • memcache和memcached的区别:

memcache时这个项目的名称,而memcached是它服务端的主程序文件名

  • mamcache的使用场景:

访问频繁的字典数据,大量的hot数据,页面缓存,频繁的查询条件和结果,临时处理的数据

  • memcache的工作流程如下:

在这里插入图片描述

  • (1)检查客户端的请求数据是否存在,memcached中,如果有请求的数据,直接把请求的数据返回,不再对数据库进行任何操作,路径为:①②③⑦,client->web/app+memcache client->memcache->web/app+memcache client->client
  • (2)如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给数据库,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),①②④⑤⑦⑥,client->web/app+memcache
    client->memcache->DB->web/app+memcache client->client
  • (3)每次更新数据库的同时更新memcached中的数据,保证一致性
  • (4)当分配给memcache内容空间用完后,会使用LRU策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据

LRU简介:

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

二、MemCache对PHP页面的缓存加速优化,配置过程详解

注意:这个实验是在前面LNMP结构搭建好的基础上面完成的

第一步:解压memcache源码包(源码包可以从网上下载)与编辑环境变量:

在这里插入图片描述

[root@hang1 install]# cd /mnt
[root@hang1 mnt]# ls
cmake-2.8.12.2-4.el6.x86_64.rpm  memcache-2.2.5.tgz  mysql-boost-5.7.17.tar.gz
Discuz_X3.2_SC_UTF8.zip          mysql-5.7.17
[root@hang1 mnt]# tar zxf memcache-2.2.5.tgz
[root@hang1 mnt]# cd memcache-2.2.5
[root@hang1 memcache-2.2.5]# ls

在这里插入图片描述
将前边php编译完成的二进制命令加入环境变量中,保证可以直接调用php命令

[root@hang1 memcache-2.2.5]# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin 
[root@hang1 memcache-2.2.5]# source ~/.bash_profile

在这里插入图片描述

在这里插入图片描述

  • phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize。
  • phpize工具是在php安装目录下,基于这点phpize对应了当时的php环境,所以是要根据该php的配置情况生成对应的configure文件,从而建立一个configure文件。必须在一个目录下去运行phpize,那么phpize就知道你的的环境是哪个目录,并且configure文件建立在该目录下。

第二步:创建一个预编译环境并进行编译汇编并且在php里面添加memcache模块

[root@hang1 memcache-2.2.5]# ./configure     #源码编译,已经安装好了php,我们就不用再指定新的php扩展模块路径
[root@hang1 memcache-2.2.5]# make && make install

在这里插入图片描述
在这里插入图片描述
在php的配置文件中添加memcache模块

[root@hang1 memcache-2.2.5]# vim /usr/local/lnmp/php/etc/php.ini
编辑文件如下所示:
extension=memcache.so

root@hang1 memcache-2.2.5]# cd modules/
[root@hang1 modules]# ls
memcache.so

[root@hang1 modules]# /etc/init.d/php-fpm  reload     #重启服务
Reload service php-fpm  done

[root@hang1 ~]# php -m | grep memcache      ##过滤memcache模块,发现已经有了这个模块
memcache
[root@hang1 ~]# php -m | grep mysql    ##同时支持mysql
mysql
mysqli
mysqlnd
pdo_mysql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三步:安装memcache工具并启动memcache

[root@hang1 ~]# yum install -y memcached
[root@hang1 ~]# rpm -qa | grep memcache
[root@hang1 ~]# rpm -ql memcached-1.4.4-3.el6.x86_64
[root@hang1 ~]# vim /etc/sysconfig/memcached    #此步不用做什么操作,只是查看一下,默认显示检测所有11211端口的所有主机

[root@hang1 ~]# /etc/init.d/memcached start
[root@hang1 ~]# netstat -tnlp     ##查看监听端口(11211端口)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
==显示检测所有11211端口的所有主机,如果想只监控本机则进行修改OPTIONS="-l 127.0.0.1" ==

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第四步:安装telnet

memchache的存储机制和指令详情请点击

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

telnet的主要用途就是使用远程计算机上所拥有的本地计算机没有的信息资源,如果远程的主要目的是在本地计算机与远程计算机之间传递文件,那么相比而言使用FTP会更加快捷有效。

交互过程:
当我们使用Telnet登录进入远程计算机系统时,事实上启动了两个程序:一个是Telnet客户程序,运行在本地主机上;另一个是Telnet服务器程序,它运行在要登录的远程计算机上。

  • 本地主机上的Telnet客户程序主要完成以下功能:

建立与远程服务器的TCP联接。
从键盘上接收本地输入的字符。
将输入的字符串变成标准格式并传送给远程服务器。
从远程服务器接收输出的信息。
将该信息显示在本地主机屏幕上。

  • 远程主机的“服务”程序通常被昵称为“精灵”,它平时不声不响地守候在远程主机上,一接到本地主机的请求,就会立马活跃起来,并完成以下功能:

通知本地主机,远程主机已经准备好了。
等候本地主机输入命令。
对本地主机的命令作出反应(如显示目录内容,或执行某个程序等)。
把执行命令的结果送回本地计算机显示。
重新等候本地主机的命令。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第五步:将测试文件cp到nginx的默认发布文件,设置memcached的密码

[root@hang1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/

[root@hang1 memcache-2.2.5]# vim /usr/local/lnmp/nginx/html/memcache.php

define('ADMIN_USERNAME','mengmeng');    // Admin Username    
define('ADMIN_PASSWORD','redhat');      // Admin Password
$MEMCACHE_SERVERS[] = '172.25.11.1:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第六步:浏览器登陆

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@hang1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/

在这里插入图片描述
然后重新打开一个浏览器页面,输入172.2.79.1:example.php ,不断刷新

在这里插入图片描述

在这里插入图片描述

第七步:压力测试加速页面example.php和没加速index.php的对比(错误率对比,相应时间对比)

加速:

[kiosk@foundation11 Desktop]$ ab -c 10 -n 5000 http://172.25.11.1/example.php

在这里插入图片描述

没加速

[kiosk@foundation11 Desktop]$ ab -c 10 -n 5000 http://172.25.11.1/index.php

在这里插入图片描述
在这里插入图片描述

总结:我们可以看到加速的命中没失败的,时间也只有5秒多,而没加速的时间28秒多,而且失败494个命中,从而说明MemCache实现php页面访问速度与命中率的提高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值