`

Nginx + Lua + 共享内存实现动态查询

阅读更多
  1. lua_package_path "/usr/local/share/luajit-2.0.2/jit?.lua;;";  
  2. lua_shared_dict devicedb 45m;   
  3.     location /query {  
  4.        default_type 'text/plain';  
  5.        content_by_lua '  
  6.                 local args = ngx.req.get_uri_args()  
  7.                 local devicetype = args["device"]  
  8.                 local devicedb = ngx.shared.devicedb  
  9.                 local res = devicedb:get(devicetype)  
  10.   
  11.                 ngx.say(res)  
  12.            ';  
  13.     }  
  14.   
  15.     location /update {  
  16.         default_type 'text/plain';  
  17.         content_by_lua '  
  18.                 local devicedb = ngx.shared.devicedb  
  19.   
  20.                 for item in io.lines("/usr/local/nginx-1.4.2/data/rule.txt") do  
  21.                     _,_,device_type, device_rule = string.find(item, "^(%a+)--(%a+)$")  
  22.                     devicedb:set(device_type,device_rule)  
  23.                 end  
  24.   
  25.                 ngx.say("ok")              
  26.            ';  
  27.     }  
    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文件格式。

 

  1. SAMSUNG--samRule  
  2. APPLE--appRule  
  3. XIAOMI--xiaRule  
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

 

转自http://blog.csdn.net/lxb_champagne/article/details/17099383

分享到:
评论

相关推荐

    基于nginx+lua+dyups实现服务自定义调度资源整理

    1. **Lua Shared Dict**:`lua`共享内存机制,用于在多个工作进程间共享数据。 2. **Lua 文件操作**:`lua`提供了一套完整的文件I/O API,允许在`nginx`中进行文件读写操作。 3. **Lua 获取参数与JSON操作**:可以...

    nginx+lua+redis黑名单加载

    为了减少对`redis`的频繁访问,可以考虑在`nginx`内存中缓存一部分最近访问过的黑名单IP,或者使用`lua_shared_dict`共享内存字典存储部分数据。 综上所述,"nginx+lua+redis黑名单加载"是一种有效的网络安全策略...

    nginx+redis实现session共享

    为了实现单点登录(Single Sign-On, SSO)以及跨应用的session共享,我们可以结合使用Nginx作为反向代理服务器,以及Redis作为持久化内存数据库来存储session数据。下面将详细解释这个解决方案的各个方面。 首先,...

    Nginx中使用Lua脚本配置示例

    总结起来,通过在Nginx中使用Lua脚本,我们可以实现更精细的流量控制、动态内容处理和自定义逻辑,从而增强Nginx服务器的功能。在实际应用中,应根据具体需求调整Lua脚本,确保其高效、稳定地运行。同时,注意合理...

    Nginx利用Lua+Redis实现动态封禁IP的方法

    2. **轻量级**:由于使用内存中的lua共享字典,对服务器性能的影响非常小。 3. **共享黑名单**:所有服务器都可以通过同一个Redis实例共享IP黑名单,实现跨服务器的封禁。 4. **动态性**:黑名单可以实时更新,可以...

    Windows + Nginx + Memcached + Tomcat 集群 session共享

    Nginx可以通过lua模块或者第三方模块(如ngx_lua_memcached)与Memcached通信。 3. **安装和配置Tomcat**:在每台服务器上部署相同的Tomcat实例,确保应用的web.xml文件配置了session复制,例如启用`...

    nginx-lua-counter.zip

    Nginx与Lua结合,通过Nginx的HttpLuaModule模块,可以实现在Nginx内部执行Lua脚本,扩展Nginx的功能,例如动态配置、流量控制、日志处理和自定义业务逻辑等。 描述中提到的链接指向了一篇CSDN博客文章,详细介绍了...

    lua-nginx-module-0.10.13

    结合ngx_lua_shared_dict,可以在内存中缓存数据库查询结果,提高响应速度。 4.3 日志分析 在log_by_lua中进行复杂日志记录和分析。 4.4 自定义错误页面 通过content_by_lua生成自定义错误页面。 五、进阶主题 ...

    redis-5.0.5:nginx + redis + lua这是后台开发的基本功。大家多交流

    因此,不同的进程可以以共享的方式查询和修改相同的数据结构。 在Redis中实现的数据结构具有一些特殊属性: 即使始终为它们提供服务并将它们修改到服务器内存中,Redis也会将它们存储在磁盘上。 这意味着Redis速度...

    Nginx添加Lua扩展模块.rar

    将Lua集成到Nginx中,可以实现更灵活的动态处理和业务逻辑控制。本教程将详细介绍如何在Nginx中添加Lua扩展模块,以增强Nginx的功能。 首先,你需要了解Nginx的模块化架构。Nginx的核心是一个事件驱动的框架,通过...

    nginx+waf的配置

    `来创建共享内存字典,用于存储WAF规则。 3. **WAF规则**:在WAF模块中,你需要定义一套安全策略,这通常包括一系列规则,如白名单、黑名单、请求参数检查等。这些规则通常以Lua脚本形式存在,通过Nginx的Lua模块...

    lua-nginx-module-0.10.9rc7

    - **Lua变量和共享内存**:通过`ngx.shared.DICT`可以创建共享内存区,实现不同工作进程间的通信和数据共享。 - **HTTP客户端**:使用`ngx.location.capture`或`ngx.location.capture_multi`可以在Lua中发起HTTP请求...

    nginx lua.zip

    Nginx Lua模块,也称为ngx_lua或者OpenResty,是由OpenResty公司开发的,它使得我们可以在Nginx的配置文件中使用Lua代码,实现动态内容生成、API路由、数据缓存、限流、认证等功能。通过Lua,我们可以编写复杂的逻辑...

    lua-nginx-module.zip

    4. 会话管理:使用lua_shared_dict可以实现基于内存的共享数据存储,从而实现会话管理。 5. 缓存机制:lua-nginx-module支持基于内存的缓存,可以提高高并发场景下的响应速度。 四、lua-nginx-module的使用 在...

    nginx-lua-redis-rate-measuring:一个lua库,可使用nginx + redis提供分布式速率测量,您可以使用它来在许多节点内进行节流系统

    通过使用 Lua 模块,Nginx 可以扩展其功能,例如动态处理请求、执行复杂的业务逻辑等。`lua-nginx-module` 是实现这一目标的关键,它允许在 Nginx 配置文件中嵌入 Lua 脚本,使 Nginx 具备了处理更复杂逻辑的能力。 ...

    Nginx-ngx_lua模块原理和内置函数.docx

    Nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,而 ngx_lua 模块则是 Nginx 的一个强大扩展,它允许在 Nginx 中直接嵌入 Lua 脚本进行动态内容处理和请求/响应的修改。这种集成不仅提高了 Nginx 的灵活性,还极...

    lua-nginx-module-0.10.20.tar.gz

    例如,通过`ngx.timer.at()`可以设置定时任务,`ngx.shared.DICT`可以提供共享内存数据结构,用于实现跨请求的数据共享。而`ngx.socket.tcp()`则允许Lua脚本创建TCP套接字,进行非阻塞I/O操作,与数据库、缓存系统等...

    nginx-lua-extras:用于NGINX Extras存储库的Lua模块软件包

    此外,Nginx-Lua-Extras还提供了丰富的模块,如`lua_resty_http`用于发送HTTP请求,`lua_resty_mysql`用于数据库操作,`lua_shared_dict`用于内存共享字典,以及`lua_resty_websocket`支持WebSocket通信等。...

    lua-nginx-module-0.10.2.tar.gz

    3. **内存数据库访问**:通过LUAJIT的FFI(Foreign Function Interface),可以方便地访问Nginx的共享内存区,如 ngx.shared.DICT,实现高效率的数据存储和共享。 4. **第三方库支持**:Lua Nginx Module还可以集成...

    lua-nginx-redis-master.zip

    Nginx通过模块化设计,允许开发者自定义模块以扩展功能,如lua-nginx-module,使得Nginx能够运行Lua脚本,实现了动态内容生成。 OpenResty则是Nginx的一个扩展平台,它集成了LuaJIT和一系列工具库,为Nginx提供更高...

Global site tag (gtag.js) - Google Analytics