在Lua-Resty(openresty)中跨请求共享一个LUA变量。

我正使用OpenResty与lua-resty,每个请求都有自己的变量。目前,我使用lua-shared-dict来共享简单字符串或配置跨请求。

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

例如:另一个示例,想象将其翻译为LUA:https://github.com/dangrossman/node-browscap/blob/master/browscap.js如何在多个OpenResty HTTP请求中维护浏览器[]数组,而无需为每个请求重新解析它?

点赞
用户1442917
用户1442917

我怎样可以在多个 OpenResty HTTP 请求之间保持浏览器数组,而不必为每个请求重新解析它?

我认为你的意思是“在多个 OpenResty 工作进程之间”或“可能会访问不同工作进程的请求”,因为所有访问同一工作进程的请求可以访问相同的变量,但是如果是这样,你可能做不到。由于你似乎只需要读取 browser[] 值(因为你正在解析大量的 INI 文件),你可以尝试一种混合方法:

  1. 将解析的结果以序列化形式存储在 lua-shared-dict 值中的一个变量(比如说 iniFile)中。
  2. 当请求进来时,检查该请求中的 iniFile 变量是否为空,如果为空,则从 lua-shared-dict 中读取 iniFile 值,反序列化并存储为同一工作进程中所有代码都将运行的 iniFile 变量的值。
  3. 如果你需要在 1 小时后刷新它以保持最新状态,存储从字典中检索该值的时间,并添加一个检查到 #2 中,当时间超过你的限制时重新检索。
2014-10-03 16:07:38