OpenResty+lua+redis+mysql多級快取

HelloWorld-Q發表於2021-05-14

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 協議》,轉載必須註明作者和本文連結
有夢想的人睡不著,沒有夢想的人睡不醒。

相關文章