nginx lua讀redis
阿新 • • 發佈:2018-12-09
- 國內企業使用nginx的還是挺多的,我在工作的過程中,也經常使用nginx;下面就簡單記錄一下lua訪問redis
local cjson = require "cjson" local redis = require "resty.redis" local red = redis:new() -- 設定後續操作的超時(以毫秒為單位)保護,包括connect方法 red:set_timeout(60000) -- 連線redis;兩個引數分別是IP以及埠號 local ok, err = red:connect("xxx.xxx.xxx.xxx", 6379) if not ok then return end -- 設定連線密碼 red:auth("xxxx") -- 切換資料庫,不設定,預設是0庫 red:select(1) local json_results={} local request_method = ngx.var.request_method if request_method == "GET" then json_results["userTag"] = 0 local value = cjson.encode(json_results) ngx.say(value) return elseif request_method == "POST" then ngx.req.read_body() args= ngx.req.get_body_data() end local arg=cjson.decode(args) if (type(arg["userIdList"]) == "nil") or (arg["userIdList"] == "") then json_results["userTag"] = 0 local value = cjson.encode(json_results) ngx.say(value) return end local useridList = {} -- 設定為pipeline()模式;批量獲取value red:init_pipeline() for k,userid in pairs(arg["userIdList"]) do useridList[k] = userid red:get("taonewslabel_"..userid) end -- 提交所有的key local respTable, err = red:commit_pipeline() -- local res, err = red:get(userid) 或者這種一次獲得一個key if (not respTable) or respTable == ngx.null then json_results["userTag"] = 0 local value = cjson.encode(json_results) ngx.say(value) return end local i = 0 local res_userid={} -- 對有值的key的處理 for k, v in pairs(respTable) do if v ~= ngx.null then res_userid[#res_userid+1] = cjson.decode(v) table.remove(useridList,k-i) i = i + 1 end end -- 對無值的key的處理 for k,userid in pairs(useridList) do local k_v={} k_v["error_code"] = 101 k_v["userid"] = userid res_userid[#res_userid+1] = k_v end json_results["userTag"] = res_userid local value = cjson.encode(json_results) ngx.say(value) red:close()