openresty实现nginx高速缓存

一、openresty介绍

  1. OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
  2. 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
  3. openresty功能:(1)根据lua脚本,可以对请求和响应进行改造(使用lua控制请求响应);(2)也可以做虚拟主机、反向代理、缓存,如果只是纯虚拟主机或者反向代理还是推荐用nginx;(3)web服务器。
  4. 简而言之,openresty其实就是对Nginx的又一次封装(个人理解),它集成了Nginx核心和常用模块,再基于lua这个脚本语言,让开发者对Nginx的功能扩展和定制不再困难。

二、nginx高速缓存

  1. 传统的缓存策略如下图所示,会容易造成nginx堵塞,因为处理请求都交给了PHP处理,进入了PHP的生命周期;
    在这里插入图片描述
  2. 使用memc-nginx和srcache-nginx模块可以构建高效透明的缓存机制。高速的缓存策略如下图所示,请求处理都是nginx自己处理,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数据并返回;
    在这里插入图片描述

三、openresty配置

1. 源码编译安装

首先从官网下载源码包:https://openresty.org/cn/download.html

[root@servera ~]# cd /root/Download/
[root@servera Download]# ls     
openresty-1.17.8.2.tar.gz
[root@servera Download]# tar zxf openresty-1.17.8.2.tar.gz 
[root@servera Download]# cd openresty-1.17.8.2/
[root@servera openresty-1.17.8.2]# ./configure
[root@servera openresty-1.17.8.2]# gmake
[root@servera openresty-1.17.8.2]# gmake install

2. 配置openresty

配置前提:要确保服务器上安装了memcached服务并开启服务,并且如果安装了nginx服务,要把nginx服务关闭,因为我们要使用openresty中的nginx模块实现。
(1)编辑openresty里面的nginx的配置文件:

[root@servera local]# cd /usr/local/openresty/
[root@servera openresty]# ls
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site
[root@servera openresty]# cd nginx/
[root@servera nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@servera nginx]# vim conf/nginx.conf	//在默认基础上添加以下内容
http {
       upstream memcache {
          server 127.0.0.1:11211;	//定义添加一个负载均衡器,11211为memcache默认端口
          keepalive 512;
        }
    server {           
        location /memc {		//调用负载均衡器
        internal;			//表示只接受内部访问
        memc_connect_timeout 100ms;	//相应的超时时间
        memc_send_timeout 100ms;
        memc_read_timeout 100ms;
        set $memc_key $query_string;	//键值对的方式经行存储,$memc_key变量,它表示以什么作为key,这里使用内置的$query_stringset $memc_exptime 300;		//表示缓存失效时间五分钟,在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。
        memc_pass memcache;
        }
        location ~ \.php$ {
            set $key $uri$args;			//定义两个处理器,确定调用逻辑
            srcache_fetch GET /memc $key;	//输入拦截处理器 GET返回数据
            srcache_store PUT /memc $key;	//输出拦截控制器 put存入memcache
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }        
    }
}
当所请求的uri以“.php"结尾时,首先到memcache中查询有没有以$uri$args为key的数据,如果有则直接返回;
否则,执行location的逻辑,如果返回的http状态码为200,则在输出前以$uri$args为key,将输入结果存入memcache。
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx -t		检测语法
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx 		//绝对路径开启
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx -s reload	//重载

(2)编辑php测试页:

[root@servera html]# pwd
/usr/local/openresty/nginx/html
[root@servera html]# vim index.php 
<?php
phpinfo()
?>

(3)进行压力测试:

[root@workstation ~]# ab -c 1 -n 20000 http://192.168.1.136/index.php

在这里插入图片描述
在这里插入图片描述
(4)查看命中率:

[root@servera nginx]# cd /root/Download/memcache-4.0.5.2/
[root@servera memcache-4.0.5.2]# cp memcache.php /usr/local/openresty/nginx/html/
[root@servera memcache-4.0.5.2]# cd /usr/local/openresty/nginx/html/
[root@servera html]# vim memcache.php 
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; 	//添加监控主机,此处只监控本机
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
[root@servera html]# /usr/local/openresty/nginx/sbin/nginx -s reload
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值