0

私のプロジェクトでは、次のようなキャッシュ設定があります。nginx_cache(60*60)(MyView.as_view())関数はのキーを設定しmemcachedますnginx./URI

Nginx は、キャッシュからページを返すか、アプリにリクエストを送信するかを決定する前に、memcached でそのキーを検索します。私が直面している問題は、キーのグループを無効にできるように、世代を持つキャッシュ キーを作成することです。

たとえば、私にとって理想的なキャッシュ キーは.... ですgroup_nameX:generationY:URL

Nginx は、Python アプリと通信せずに生成キーを把握する必要があります。

それは私に不自然なアイデアを残します.djangoを介して3つのキャッシュ値を設定します。

  • アプリと通信せずにnginxが見つけられる方法でのグループ名
  • その特定のグループ名の世代番号
  • フル キャッシュ キー/出力 (html ページ)

LuaModulenginx 側では、 andを利用する必要があると思いますMemc。バニラ以外の nginx を使用したことがないので、避けるのが最善ですが、選択肢があるかどうかはわかりません。

http://wiki.nginx.org/HttpLuaModule#ngx.location.capture
http://wiki.nginx.org/NginxHttpMemcModule

Memc を使用してキーを取得する 2 つの内部ロケーション ディレクティブを設定する必要があります。

私の主な場所のディレクティブは...

  • $genkey set_by_lua(内部の場所 get_key_name をキャプチャ)
  • $gen_number set_by_lua(内部ロケーション get_key_number_from_name を取得)
  • $memcached_key "$genkey-$gen_number-$request_uri"

このキャッシング設定を簡素化する方法はありますか? 私が知らない一般的に受け入れられている方法はありますか?(おそらく - 私はこれを作っています!)

4

1 に答える 1

0

私はあなたが何を望んでいるのか誤解しているかもしれませんが、あなただけではできませんでした:

  1. X-Generation (または任意の名前) http ヘッダーをアプリの出力に追加します。
  2. 次に、その値を使用して memcached_key を設定するだけです

nginx 側では、次のような結果が得られます。

location /app/ {
  #add you're normal directives for app calling
  set $memcached_key group_nameX:$sent_http_X_Generation:$request_uri;
}

http 応答ヘッダー値にアクセスする変数の詳細については、http://wiki.nginx.org/HttpCoreModule#.24sent_http_HEADERを参照してください。

于 2012-09-13T21:21:52.677 に答える