OpenResty: 如何在 Lua 中创建 ngx.shared.DICT 而不使用指令?

我正在为一个已有的 OpenResty 应用编写一些测试。它使用一些共享字典,这些字典是通过 nginx.conf 文件中的 lua_shared_dict 指令创建的。

我可以编写自己的模拟实现,但我想知道是否有可能编写一个程序来创建 ngx.shared.DICT 对象?

是否可以在 Lua 中创建它,还是最好自己创建一个模拟实现?


背景:我当前的测试设置非常简单。我使用 busted 作为测试框架,并通过 resty 二进制文件从命令行运行它。这个想法来自于 这篇文章

点赞
用户783510
用户783510

我没有找到通过程序创建共享字典的方法,所以我最终模拟它:

ngx.shared.someDict = {}
ngx.shared.someDict.get = function(self, key)
  return ngx.shared.someDict[key]
end
ngx.shared.someDict.set = function(self, key, val)
  ngx.shared.someDict[key] = val
end
2017-07-17 16:50:17
用户9968475
用户9968475

ngx.shared.DICTngx_shm_zone_t,由 nginx 用于在进程间共享内存。根据 nginx 指南,共享内存在解析配置时分配,因此可能无法在 lua 代码中初始化。特别地,ngx.shared.DICT 用于在进程间共享内存。当 worker 进程已经初始化时,将不可能通过 mmap 调用来分配与父进程共享的内存。

2020-02-24 08:26:39