本文主要是介绍memcached 和 openresty 实现高速缓存机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是memcached?
不支持持久化,没有安全机制。可以用telnet等工具直接连接memcached。memcached是多线程工作,而redis是单线程工作。各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。
定义 :memcached是一个免费开源的、高性能的、具有分布式内存对象的缓存系统,通过减轻数据库负载来加速动态web应用。
实现步骤
yum install memcached -y
安装软件包,并且开启systemctl start memcached
,
通过telnet工具访问本地11211端口
set key flags exptime bytes [noreply]
value
- key:键值 key-value 结构中的 key,用于查找缓存值。
- flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
- exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
- bytes:在缓存中存储的字节数
- noreply(可选): 该参数告知服务器不需要返回数据
- value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
测试:
- 给PHP添加memcache 模块
链接: memcache模块 提取码: w64x
软件包下载后tar zxf memcache-4.0.5.2.tgz
解压,yum install autoconf -y
,进入解压后的目录phpize
生成configure文件./configure
检测执行环境,make && make install
编译
- 编辑php的主配置文件
/etc/init.d/php-fpm reloa
重启服务
php -m | grep memcache
检测该模块是否加上
测试:
用两个测试文件进行测试: 链接: memcache.php提取码: hnax
链接: example.php 提取码: d453
将两个文件放到nginx的默认发布目录中
openresty实现高速缓存机制
传统的客户端访问策略
访问流程:客户端通过http协议访问nginx(只能处理静态,动态php资源会调用php-pfm)nginx调用php进行处理,php将处理好的结果暂存在memcache,当外部又有相同处理请求时直接通过memcache将结果返回给php再返回给nginx,nginx再返回给客户端。
- 问题所在:nginx特点:高并发,高性能。但是php动态资源请求是由外部的php处理,至于什么时候能处理完成,是由php决定,不由nginx决定。所以,最大的缺点是会造成nginx阻塞。
高速缓存策略
访问过程:客户端通过http协议访问nginx(只能处理静态,动态php资源会调用php-pfm)nginx调用php进行处理,php处理完成后将结果返回给nginx,而nginx内部恰好有memcache进行缓存,当有相同请求进来时,nginx就直接可以将结果返回给客户端,明显会有加速的过程,ngingx也不会被阻塞。
为什么使用openresty?
原生的nginx并不带memc和scrache模块,一般情况下还需要下载两个模块并重新编译nginx。这里我们就不再重新编译,我们直接使用openresty(自带memc、scrache模块)。
实现步骤
链接: openresty 提取码: 8g65
tar zxf openresty-1.17.8.2.tar.gz
解压之后, 进入解压的目录./configure --prefix=/opt/openresty
( 默认是安装到/usr/local/openresty
目录下) 这里我指定安装目录为/opt/openresty
,环境检测成功后make && make install
- 关闭nginx服务
- 将openresty目录下的bin目录写入到环境变量中,并
source ~/.bash_profile
使之生效
openresty
开启服务, 可以看到使用的是80 端口
配置该配置文件vim /opt/openresty/nginx/conf/nginx.conf
测试:
将原先nginx发布目录中的example.php 移动到openresty的发布目录
cp /usr/local/lnmp/nginx/html/example.php /opt/openresty/nginx/html/
当关闭缓存,即注释掉配置目录中的
重启服务(openresty -s reload
)进行压测 ab -c 10 -n 1000 http://172.25.3.199/example.php
(-c 10表示用户并发数为10, -n 1000 表示请求总数为1000)
当打开缓存,并重启服务,进行压测
测试结果:
效果明显提升
这篇关于memcached 和 openresty 实现高速缓存机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!