Nginx + Lua + 共享内存实现动态查询(简单例子)

原创 2013年12月03日 18:07:08

Nginx 配置。

    lua_package_path "/usr/local/share/luajit-2.0.2/jit?.lua;;";
    lua_shared_dict devicedb 45m; 
        location /query {
           default_type 'text/plain';
           content_by_lua '
                    local args = ngx.req.get_uri_args()
                    local devicetype = args["device"]
                    local devicedb = ngx.shared.devicedb
                    local res = devicedb:get(devicetype)

                    ngx.say(res)
               ';
        }

        location /update {
            default_type 'text/plain';
            content_by_lua '
                    local devicedb = ngx.shared.devicedb

                    for item in io.lines("/usr/local/nginx-1.4.2/data/rule.txt") do
                        _,_,device_type, device_rule = string.find(item, "^(%a+)--(%a+)$")
                        devicedb:set(device_type,device_rule)
                    end

                    ngx.say("ok")            
               ';
        }

rule.txt文件格式。

SAMSUNG--samRule
APPLE--appRule
XIAOMI--xiaRule


步骤1,访问/update,更新共享内存devicedb

步骤2,访问query?device=XIAOMI,返回xiaRule

步骤3,修改rule.txt,将xiaRule改为xiaRuleaaaa

步骤4,访问/update,更新共享内存devicedb

步骤5,访问query?device=XIAOMI,返回xiaRuleaaaa


内网响应时间在5~10ms。


参考文章:

http://my.oschina.net/766/blog/158972

http://haili.me/archives/722.html



ngx_lua模块中的共享内存字典项API

在ngx_lua模块中使用共享内存字典项相关API的前提条件是已经使用
  • weiyuefei
  • weiyuefei
  • 2014年08月11日 11:34
  • 17977

NGINX 结合 lua 动态修改upstream

具体思路是:  1 > 利用lua中 "lua_shared_dict" 指令开辟一个共享内存空间; 2> 通过API动态根据key值&参数修改 upstream  (这里使用 host 作为key)...
  • force_eagle
  • force_eagle
  • 2016年07月20日 11:13
  • 10221

使用lua语言做高并发限流

lua语言介绍        Lua[1]  是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的...
  • shecanwin
  • shecanwin
  • 2016年06月20日 15:17
  • 3630

nginx+redis+lua 共享内存

环境:nginx + redis 起因:项目中有些接口是需要客户端轮询去访问的,这样所造成的后果就是这些接口一直占用redis内存,造成其他接口效率的降低(如果此时正好赶上JOB运行,redis的消...
  • wenmeishuai
  • wenmeishuai
  • 2015年06月02日 14:55
  • 1062

ngx映射到lua模块函数变量一览

ngx.arg[1]                脚本参数 ngx.var['arg_a']            取queryString的参数a #/nginx_var?a=hello,wor...
  • joeyon
  • joeyon
  • 2015年07月03日 18:48
  • 5252

nginx-lua 运行阶段

Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是{ post-read、[Nginx 读取并解析完请求头(request headers)之后就立即开始运行 server-re...
  • fb408487792
  • fb408487792
  • 2016年12月13日 15:27
  • 1082

Nginx + Lua + 共享内存实现动态查询(简单例子)

Nginx 配置。 [plain] view plain copy lua_package_path "/usr/local/share/luajit-...
  • Truong
  • Truong
  • 2017年06月11日 17:38
  • 187

nginx之共享内存

常用函数 ngx_shmtx_create() 创建 ngx_shmtx_destory() 销毁 ngx_shmtx_trylock() 尝试加锁(加锁失败则...
  • evsqiezi
  • evsqiezi
  • 2016年06月29日 18:34
  • 996

Linux内存管理之mmap详解&&nginx子进程间通信

一. mmap系统调用 1. mmap系统调用         mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的...
  • shero_zsmj
  • shero_zsmj
  • 2016年07月13日 14:37
  • 503

nginx的worker进程间通信

使用共享内存的方式。nginx本身很好地封装了共享内存操作的方法。 1、管理共享内存的变量,一般放到全局的配置结构中,或者直接用全局变量。ngx_shm_zone_t指针引用创建的共享内存、ngx_s...
  • huangxiaozuo
  • huangxiaozuo
  • 2017年01月18日 19:29
  • 332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Nginx + Lua + 共享内存实现动态查询(简单例子)
举报原因:
原因补充:

(最多只允许输入30个字)