zoukankan      html  css  js  c++  java
  • nginx+lua+redis高并发应用建设

    ngx_lua将lua嵌nginx,让nginx运行lua脚本。高并发,非堵塞过程中的各种请求。

    url要求nginxserver,然后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

  • 相关阅读:
    从.Net迁移到.Net Core时,需要注意的兼容性变更
    P/Invoke各种总结(五、在C#中使用指针类型)
    P/Invoke各种总结(四、平台调用时的数据类型对应)
    解决Visual Studio 2017/2019 "const char *"类型的值不能用于初始化"char *"类型的实体的问题
    .Net Framework、.Net Core和.Net Standard的区别
    C#代码分析工具Style Cop使用
    《代码不朽:编写可维护软件的10大要则(C#版)》读书笔记
    Visual C++中宽字节与多字节字符互相转换的方法
    浮动和定位
    关于如何设置图片大小和图片形状
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4561593.html
Copyright © 2011-2022 走看看