nginx+lua+redis構建高并發應用

TwiSGF 8年前發布 | 15K 次閱讀 Web服務器

來自: http://blog.csdn.net//jiao_fuyou/article/details/36186485


ngx_lua將lua嵌入到nginx,讓nginx執行lua腳本,高并發,非阻塞的處理各種請求。

url請求nginx服務器,然后lua查詢redis,返回json數據。


一.安裝lua-nginx-module

參見《LNMLGC》架構


二.安裝redis2-nginx-module模塊

get https://github.com/openresty/echo-nginx-module
get https://github.com/openresty/redis2-nginx-module
get https://github.com/agentzh/set-misc-nginx-module.git

#
./configure --prefix=/usr/local/nginx   \
--with-debug                            \
--with-http_stub_status_module          \
--with-http_ssl_module                  \
--with-pcre=../pcre-8.21                \
--add-module=../ngx_devel_kit-0.2.19    \
--add-module=../lua-nginx-module-0.9.8  \
--add-module=../echo-nginx-module       \
--add-module=../redis2-nginx-module     \
--add-module=../set-misc-nginx-module


# make
# make install

三.安裝lua-redis-parser
# git clone https:
//github.com/agentzh/lua-redis-parser.git
# export LUA_INCLUDE_DIR=/usr/local/include/luajit-2.0
# make CC=gcc
# make install CC=gcc

四.安裝json
# wget http:
//files.luaforge.net/releases/json/json/0.9.50/json4lua-0.9.50.zip
# unzip json4lua-0.9.50.zip
# cp json4lua-0.9.50/json/json.lua /usr/local/lua/lib/

五.安裝redis-lua
# git clone https:
//github.com/nrk/redis-lua.git
# cp redis-lua/src/redis.lua /usr/local/lua/lib/

六.配置
...
http {
    ...
    upstream redis_pool {
        server localhost:6379;
        keepalive 1024 single;
        //定義連接池大小,當連接數達到此數后,后續的連接為短連接
    }
    server {
        ...
        location /get_redis{
            #internal;
            set_unescape_uri $key $arg_key;
            redis2_query hgetall $key;
            redis2_pass redis_pool;
        }
        location /json {
            content_by_lua_file conf/test.lua;
        }
    }
}

# vi test.lua,放在nginx.conf同目錄下
local json = require("json")
local parser = require("redis.parser")
local res = ngx.location.capture("/get_redis",{
  args = { key = ngx.var.arg_key }
})
if res.status == 200 then
  reply = parser.parse_reply(res.body)
  value = json.encode(reply)
  ngx.say(value)
  a = json.decode(value)
  ngx.say(a[2])
end

七.測試
# redis-cli
127.0.0.1:6379> HMSET ttlsa www www.ttlsa.com mail mail.ttlsa.com
OK
127.0.0.1:6379> hgetall ttlsa
1) "www"
2) "www.ttlsa.com"
3) "mail"
4) "mail.ttlsa.com"

# curl http://localhost/json?key=ttlsa

["www","www.ttlsa.com","mail","mail.ttlsa.com"]

www.ttlsa.com

 本文由用戶 TwiSGF 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!