lua與Openresty介紹
lua是一個小巧的指令碼語言,由標準C編寫而成,幾乎在所有作業系統和平臺上都可以編譯執行。其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。
應用場景:遊戲開發、獨立應用指令碼、redis中巢狀呼叫實現類似事務的功能,web容器彙總處理NGINX的過濾快取等等邏輯
OpenResty是一個基於Nginx與Lua的高效能web平臺,由中國人章亦春發起,其內部整合了大量精良的Lua庫、第三方模組以及大多數的依賴項。用於方便搭建能處理超高併發、擴充套件性極高的動態Web應用、web服務和動態閘道器
OpenResty簡單理解成就相當於封裝了NGINX,並且整合了LUA指令碼,開發人員只需要簡單的使用其提供了模組就可以實現相關的邏輯,而不像之前,還需要在NGINX中編寫lua的指令碼。
docker pull openresty/openresty
docker cp openresty:/etc/nginx/conf.d/default.conf /docker/openresty/conf/default.conf
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;
}
}
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
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;
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結