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;} | |
} |