Nginx内嵌Lua脚本提高分布式缓存命中率

解决问题:负载均衡的时候,假如业务逻辑主机有四台(A,B,C,D),虽然配置ip_hash(ji),这只是实现同一个ip去请求一个上层业务服务器(可以解决session的问题),但是现在,如果要实现一个商品页面的缓存内容只缓存在一台服务器A (所有关于这个页面请求都丢给A服务器,BCD服务器没有关于这个页面的缓存内容),极大程度的节省了服务器的存储空间。

首先查看当前服务器的版本:nginx  -V (注:根据我的测试,可以增加 lua 模块的版本对也nginx的版本有要求,最低版本是:nginx/1.6.0)

 安装Lua,和这个业务中需要相应的代码包模块:

1、安装lua

wget  http://luajit.org/download/LuaJIT-2.0.5.tar.gz

tar -zxvf  LuaJIT-2.0.5.tar.gz

cd  LuaJIT-2.0.5

make install PREFIX=/usr/local/LuaJIT

2、/etc/profile 文件中加入环境变量

export LUAJIT_LIB=/usr/local/LuaJIT/lib

export LUAJIT_INC=/usr/local/LuaJIT  #路径是上面luajit实际安装路径,路径错误安装nginx的lua模块时会报错很找不到luajit库

下载相应的模块:

1.下载ngx_devel_kit模块

wget  https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

2.下载lua-nginx-module模块

wget  https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz

解压后,重新编译nginx  引入相应的模块:

--add-module=/root/nginx-lua/lua-nginx-module-0.10.9rc7  --add-module=/root/nginx-lua/ngx_devel_kit-0.3.0

编写相应的nginx 配置(记得执行:nginx -s reload  否在配置不生效)

upstream.lua的代码编写:

local  uri_args=ngx.req.get_uri_args()
local  id=uri_args["id"]
local  server={"193.45.126.217:9502","193.45.126.217:9503"}
local  hash=ngx.crc32_long(id)
local  index=(hash % table.getn(server))+1
url="http://"..server[index]
local  http=require("resty.http")
local  httpClient=http.new()
local  resp,err = httpClient:request_uri(url,{method="GET"})
if not resp then
      ngx.say(err)
      return
end
ngx.say(resp.body)

httpClient:close()

为了方便测试,我用Swoole创建了两台http服务器,分别是端口9502,9503http服务器。

9502Http服务器

<?php
$http=new swoole\http\server(‘0.0.0.0‘,9502);

$http->on(‘request‘,function ($request, $response){
    $response->end(‘<h1>9502:‘.date(‘m-d H:i:s‘).‘</h1>‘);
});

$http->start();

9503Http服务器

<?php
$http=new swoole\http\server(‘0.0.0.0‘,9503);

$http->on(‘request‘,function ($request, $response){

    var_dump($request);

    $response->end(‘<h1>9502:‘.date(‘m-d H:i:s‘).‘</h1>‘);

});

$http->start();

原文地址:https://www.cnblogs.com/zhengweizhao/p/10131627.html

时间: 2024-10-18 11:26:06

Nginx内嵌Lua脚本提高分布式缓存命中率的相关文章

Nginx 内嵌lua脚本,结合Redis使用

0x00 Nginx 内嵌Lua脚本有以下特点: 20k个并发连接 Lua脚本可以在Nignx 11个层次的不同层次发挥作用,扩展Ngnix功能 Lua速度极快(寄存器指令) 0x01 应用场景 在web server端做请求过滤处理(如:WAF.Anti CC等) 0x02 简单配置过程 测试环境Ubuntu Server 14.04.2 LTS 几个需要下载的模块(注意安装顺序和export路径问题) Nginx 1.7.4 LuaJIT-2.0.4(A Just-In-Time Compi

HTML 内嵌JS脚本

提供一个JS参考手册入口:http://www.w3school.com.cn/jsref/index.asp. JavaScript 最常用于图片操作.表单数据处理以及内容动态更新. <!DOCTYPE html> <html> <head>? <meta?charset="utf-8">? <title>菜鸟教程(runoob.com)</title>? </head> <body> &

Unity内嵌浏览器脚本

资源名称:Embedded Browser 资源大小: 117.4MB 资源版本: v1.0.2 资源类型: .unitypackage 安装要求:要求Unity 5.3.0或更高版本 官网地址:https://www.assetstore.unity3d.com/cn/#!/content/55459 网盘下载地址:链接: https://pan.baidu.com/s/1qXXMpoK 密码: fv95 资源说明: 本资源能够帮你渲染一个完全可交互的网页.通过本资源,你可以轻松加快你的库存管

Nginx+Lua+Redis 实现高性能缓存数据读取

本文摘自: https://segmentfault.com/p/1210000011625271/read 不采用lua之前,我们从redis获取数据的路径与采用lua之后获取数据的路径对比,明显可以看出效率的提升. 安装OpenResty 参考官方给出的yum安装步骤,各种系统均有支持,也可采用源码安装的形式,安装完成后默认路径是/usr/local/openresty,新版本的OpenResty自带Redis操作模块,所以无须我们自己重新安装. 配置nginx 在http模块下面增加如下配

nginx使用lua脚本的方法

nginx中使用lua脚本的方法,本文介绍通过第三方模块lua-nginx-module实现lua脚本在nginx的调用,并附一个配置例子 Lua是一种跟JavaScript很像的语言,Ngix_Lua同样使用异步单线程,语法甚至比JS更加简单,之前的评测指出,Ngix_lua的性能几乎是Node.JS的一倍. Nginx 特点 1.流行的高性能HTTP服务器2.事件驱动(异步)架构3.少量且可测内存占用4.声明性配置语言5.基于C的可扩展模块 通过lua-nginx-module即可在ngin

【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-16 10:08 30803人阅读 评论(18) 收藏 举报 游戏脚本luaanimationpython 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/681.htm

CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Redis下载地址:wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.安装依赖包 yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl

Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行.         下面是使用原生的lua解释器编译字节码:         1.新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件         2.开始--运行--cmd

.Net Core使用分布式缓存Redis:Lua脚本

一.前言 运行环境window,redis版本3.2.1.此处暂不对Lua进行详细讲解,只从Redis的方面讲解. 二.Redis的Lua脚本 在Redis的2.6版本推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行,在Lua脚本中也可以调用大部分的Redis命令.使用脚本有以下三个好处: (1) 减少网络开销:有些时候需要多次请求Redis获取处理数据,而使用脚本功能就可以只使用一次请求完成相同操作,减少了网络往返时延. (2) 原子操作:Redis会将整个脚本作为一个整体