2014-10-03 26 views
4

我正在使用OpenResty和lua-resty;很明顯,對於每個請求,程序都有自己的變量。要通過請求共享簡單的字符串或配置,我目前使用lua-shared-dict。Lua-Resty在open請求中共享一個LUA變量(openresty)

但是,如果我需要跨請求共享和維護一個大變量(例如:解析大型INI文件所產生的複雜表)(例如,爲了提高性能,該變量每小時創建一次), 我該怎麼做?

(例如:另一實例中,想象到在LUA翻譯這樣:https://github.com/dangrossman/node-browscap/blob/master/browscap.js;我怎樣才能維護瀏覽器[]數組跨多個OpenResty HTTP請求,而不必重新解析它爲每個請求)

回答

4

如何跨多個OpenResty HTTP請求維護瀏覽器[]數組,而不必爲每個請求重新解析它?

我假定你或者「跨可能會碰到不同的工人要求」所有擊中同一勞動者可以訪問相同的變量的要求,但如果是這樣,你可能並不意味着「多個OpenResty工」 。因爲你似乎只需要閱讀browser[]值(因爲你是分析一個大的INI文件),你可以嘗試一種混合的方法:

  1. Store中的Lua,一個在序列化形式分析的結果共享字典值(比如iniFile)。
  2. 當請求進入時,檢查該請求中的iniFile變量是否爲零,如果是,則從lua-shared-dict中讀取iniFile值,將其反序列化並存儲爲由共享的iniFile變量的值所有由同一工作人員運行的代碼。
  3. 如果您需要在1小時後刷新它以保持最新狀態,請存儲從字典中檢索值的時間,並在時間超過限制時重新檢索#2以重新檢索。