在Lua-Resty(openresty)中的请求之间共享LUA变量

Car*_*rio 4 lua openresty

我正在使用带有lua-resty的OpenResty;显然,对于每个请求,程序都有其自己的变量。为了在请求之间共享简单的字符串或配置,我目前使用lua-shared-dict。

但是,如果我需要在请求之间共享和维护一个大变量(例如,由大型INI文件解析而成的复杂表)(例如,每小时创建一个变量,以提高性能),那么可以吗

(例如:另一个示例,假设将其翻译成LUA:https : //github.com/dangrossman/node-browscap/blob/master/browscap.js;如何在多个OpenResty HTTP请求中维护browser []数组,不必为每个请求重新解析?)

Pau*_*nko 5

如何在多个OpenResty HTTP请求中维护browser []数组,而不必为每个请求重新解析它?

我假设您的意思是“跨越多个OpenResty工作者”或“跨越可能击中不同工作者的请求”,因为命中同一工作者的所有请求都可以访问相同的变量,但是如果这样,您可能无法访问。由于您似乎只需要读取browser[]值(在解析大型INI文件时),因此可以尝试一种混合方法:

  1. 将解析结果以序列化形式存储在lua-shareddict值之一(假设iniFile)中。
  2. 当请求进入时,检查该请求中的iniFile变量是否为nil,如果是,iniFile则从lua-shared-dict中读取值,反序列化并将其存储为iniFile所有运行代码共享的变量值由同一个工人。
  3. 如果您需要在1小时后刷新以保持其最新状态,请存储从字典中检索值的时间,并在时间超过限制时将检查添加到#2以重新检索。