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

时间:2014-10-03 10:55:24

标签: lua openresty

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

但是,如果我需要跨请求共享和维护一个大变量(例如:解析大型INI文件所产生的复杂表)(例如,每小时创建一个变量,以提高性能) ,我该怎么办?

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

1 个答案:

答案 0 :(得分:4)

  

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

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

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