4

私は lua-resty で OpenResty を使用しています。明らかに、各リクエストに対して、プログラムには独自の変数があります。リクエスト間で単純な文字列または構成を共有するために、現在 lua-shared-dict を使用しています。

しかし、リクエスト間で大きな変数 (例えば、大きな INI ファイルの解析によって作成された複雑なテーブル) を共有および維持する必要がある場合 (変数は、たとえば、パフォーマンスを向上させるために 1 時間ごとに作成されます)、どうすればよいですか?私がやる?

(例: 別の例として、これを 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 値の 1 つにシリアル化された形式で解析の結果を格納します (たとえばiniFile)。
  2. iniFileリクエストが受信されたら、そのリクエストの変数が nil かどうかを確認し、 nil の場合はiniFilelua-shared-dict から値を読み取り、デシリアライズして、iniFile実行されるすべてのコードで共有される変数の値として保存します同じ労働者による。
  3. 最新の状態に保つために 1 時間後に更新する必要がある場合は、ディクショナリから値が取得された時刻を保存し、制限を超えたときに再取得するように #2 にチェックを追加します。
于 2014-10-03T16:07:38.373 に答える