openresty 在http和tcp服务之间实现共享内存复用(lua_shared_dict)

仓库地址

apisix-nginx-module

本项目是基于官方 Apache APISIX 模块进行了修改和扩展,详细信息请查看官方仓库 https://github.com/api7/apisix-nginx-module

简介

本项目通过修改官方的 apisix-nginx-module,实现了在 OpenResty 中实现 HTTP 和 TCP 服务之间的共享内存复用,利用 lua_shared_dict 实现了在不同子系统之间的数据共享。

实现目标

本项目的核心目标包括:

  1. 统一重复实现:优化 ngx_http_lua_modulengx_stream_lua_module 的重复实现,通过更加优雅的代码重构,简化了 lua-resty-core 的代码库,提升了整体性能并减小了二进制文件的体积。

  2. 跨子系统数据共享:长期以来,开发者期待的在 http {}stream {} 子系统之间共享 lua_shared_dict 功能得以实现。在实现此功能的过程中,还进行了相关代码的清理和优化。

使用步骤

为了使用本项目,您需要按照以下步骤进行配置和部署:

  1. 下载和补丁

    cd apisix-nginx-module/patch
    ./patch.sh ThePathOfYourOpenRestySrcDirectory
    

    这一步将会把修改后的代码集成到您的 OpenResty 源代码中。

  2. 配置和编译

    cd openresty-1.19.9.1
    ./configure --add-module=../apisix-nginx-module/src/meta
    make -j10
    

    在这一步中,您需要配置 OpenResty 并编译安装,确保将 ../apisix-nginx-module/src/meta 添加为模块。

示例配置

以下是一个简单的示例配置,用于验证您的部署是否成功:

lua {
    lua_shared_dict dogs 1m;
}

http {
    server {
        listen 9991;
        location /t {
            content_by_lua_block {
                ngx.shared.dogs:set("foo", "abcd")
                print(ngx.shared.dogs:get("foo")) -- 输出 "abcd"
            }
        }
    }
}

stream {
    server {
        listen 9992;
        content_by_lua_block {
            print(ngx.shared.dogs:get("foo")) -- 输出 "abcd"
        }
    }
}

这个配置展示了如何在 HTTP 和 TCP 子系统中使用 ngx.shared.dogs 共享字典,确保了数据在不同子系统之间的可靠性和一致性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值