我剛剛進入 openresty/lua/nginx,我對 nginx/openresty 宇宙中的全域范圍并不是 100% 清楚。
我想每分鐘將一個包含大約 1000 條記錄(一列)的小型 mysql 表加載到“記憶體”(作為陣列或映射)中,并讓 content_by_lua_block 中的所有請求都可以讀取資料。
該表包含單行,這是一個唯一的“會話”。我想每分鐘重繪 一次表(通過在主執行緒中執行 mysql 查詢)并允許 Web 請求能夠通過 content_by_lua_block 訪問/搜索陣列。
為了進一步解釋,會話資料從 mysql 主服務器復制到 openresty 服務器。它包含原始服務器上所有登錄用戶的會話 cookie。openresty/nginx 配置檢查請求中指定的 cookie 是否是有效的會話 cookie(通過在我們提取的“記憶體”表中查找它)并根據會話 cookie 是否有效來提供請求。
我已經通過在每個請求上對本地主機執行 mysql connect 查詢并根據是否傳遞了有效的會話 cookie 來提供內容來做到這一點,但我想看看是否有可能通過以下方式提高效率將所有會話資料保存在記憶體中,并通過 mysql 查詢每分鐘重繪 一次。
謝謝!
uj5u.com熱心網友回復:
您可以使用 ngx.shared.DICT 快取資料以供多個 nginx 行程使用。查看官方檔案以了解如何使用它存盤資料。在這個字典中存盤資料應該首先將你的資料序列化為字串。
uj5u.com熱心網友回復:
nginx-worker 內的資料共享
所以你可以創建一個 Lua 模塊并在這個模塊中共享你的表。
請記住 - 這適用于每個工人。
您應該啟動一個計時器init_worker_by_lua_block來定期輪詢資料庫服務器。
我不建議將作業人員專門用于輪詢 - 您會對作業人員之間的同步表感到頭疼。每名工人每分鐘一次 IMO 是可以接受的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/406922.html
標籤:
上一篇:Gunicorn,nginx,django,在docker容器內。Gunicorn在80埠成功運行,但nginx失敗
