openresty(nginx) redis 通用工具類

趙安家發表於2017-08-16

openresty/lua-resty-redis 是章亦春開發的openresty中的操作redis的庫。

擷取官方部分程式碼,進行說明

    local redis = require "resty.redis"
    local red = redis:new()

    red:set_timeout(1000) -- 1 sec --設定超時時間

    local ok, err = red:connect("127.0.0.1", 6379) --設定redis的host和port
    if not ok then --判斷生成連線是否失敗
        ngx.say("failed to connect: ", err)
        return
    end

    ok, err = red:set("dog", "an animal") --插入鍵值(類似 mysql insert)
    if not ok then --判斷操作是否成功
        ngx.say("failed to set dog: ", err)
        return
    end

    ngx.say("set result: ", ok) -- 頁面輸出結果
    -- put it into the connection pool of size 100,
    -- with 10 seconds max idle time
    local ok, err = red:set_keepalive(10000, 100) --將連線放入連線池,100個連線,最長10秒的閒置時間
    if not ok then --判斷放池結果
        ngx.say("failed to set keepalive: ", err)
        return
    end
    -- 如果不放池,用完就關閉的話,用下面的寫法
    -- or just close the connection right away:
    -- local ok, err = red:close()
    -- if not ok then
    --     ngx.say("failed to close: ", err)
    --     return
    -- end複製程式碼

如果用過java,c#等物件導向的語言,就會覺得這麼寫太。。。。了,必須重構啊,暴露太多無關細節了,導致程式碼中有大量重複程式碼了。

同樣的內容,使用我封裝後的程式碼。

    -- 依賴庫
    local redis = require "resty.redis-util"
    -- 初始化
    local red = redis:new();
    -- 插入鍵值
    local ok,err = red:set("dog","an animal")
    -- 判斷結果
    if not ok then
      ngx.say("failed to set dog:",err)
      return
    end
    -- 頁面列印結果
    ngx.say("set result: ", ok) -- 頁面輸出結果複製程式碼

詳細使用方法,參見我的專案 anjia0532/lua-resty-redis-util

部落格 anjia.ml/2017/08/16/…
掘金 juejin.im/post/5993fe…
簡書 www.jianshu.com/p/54cca5f33…

相關文章