lua与Openresty介绍
lua是一个小巧的脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
应用场景:游戏开发、独立应用脚本、redis中嵌套调用实现类似事务的功能,web容器汇总处理NGINX的过滤缓存等等逻辑
Openresty介绍
OpenResty是一个基于Nginx与Lua的高性能web平台,由中国人章亦春发起,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便搭建能处理超高并发、扩展性极高的动态Web应用、web服务和动态网关
OpenResty简单理解成就相当于封装了NGINX,并且集成了LUA脚本,开发人员只需要简单的使用其提供了模块就可以实现相关的逻辑,而不像之前,还需要在NGINX中编写lua的脚本。
1. 拉取一个Openresty的镜像
docker pull openresty/openresty
2. 进入容器 获取配置文件 default.conf 复制到宿主机
docker cp openresty:/etc/nginx/conf.d/default.conf /docker/openresty/conf/default.conf
3. 修改nginx配置文件
server { listen 90; listen [::]:90; server_name localhost; root /docker/www/webserver; index index.html; location /your key { content_by_lua_file /docker/www/lua/lmrs_home_index.lua; } }
4.创建lua配置文件
ngx.header.content_type = "application/json;charset=utf8"
local cache_ngx = ngx.shared.dis_cache;
local contentCache = cache_ngx:get("your key");
if contentCache == "" or contentCache == nil then
local redis = require("resty.redis");
local red = redis:new()
red:set_timeout(2000)
red:connect("your host", 6379)
local rescontent = red:get("your key");if ngx.null == rescontent or false == rescontent or "" == rescontent then
local cjson = require("cjson");
local mysql = require("resty.mysql");
local db = mysql:new();
db:set_timeout(2000)
local props = {
host = "your host",
port = 3306,
database = "your database",
user = "your user",
password = "your password"}
local res = db:connect(props);
local select_sql = "select * from lmrs_product_categorys"
res = db:query(select_sql);
local responsejson = cjson.encode(res);
red:set("your key", responsejson);
ngx.say(responsejson);
db:close()else
cache_ngx:set("your key", rescontent, 10 * 60);
ngx.say(rescontent)
end
red:close()else
ngx.say(contentCache)
end
5. nginx配置
lua_shared_dict dis_cache 10m; server { listen 90; listen [::]:90; server_name localhost; root /docker/www/webserver; index index.html login.html ; location /your key { content_by_lua_file /docker/www/lua/lmrs_home_index_category.lua;} }