4

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

但是,如果我需要跨请求共享和维护一个大变量(例如:通过解析大型 INI 文件生成的复杂表)(例如,为了提高性能,每小时创建一个变量),如何我做吗?

(例如:另一个例子,想象一下在 LUA 中翻译这个:https ://github.com/dangrossman/node-browscap/blob/master/browscap.js ;如何跨多个 OpenResty HTTP 请求维护 browser[] 数组,无需为每个请求重新解析它?)

4

1 回答 1

5

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

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

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