0

初めての主要な Django アプリをデプロイしていますが、キャッシュに関するアドバイスが必要です。

私のサイトでは、Google の Analytics API を使用して、サイト内の「人気のあるコンテンツ」のリストを表示しています。これらの API 呼び出しは遅い (2 ~ 5 秒) ため、結果を 1 時間キャッシュします。次に、15 分ごとに実行され、Google からのデータを再要求する cron ジョブがあります。これを 1 時間キャッシュして 15 分ごとに更新するのは少し奇妙に思えるかもしれません。

サイトのメイン出力を数時間キャッシュします (それ以上の頻度で更新することはありません)。もちろん、これは、「人気のあるコンテンツ」をレンダリングするテンプレートの部分は、API を頻繁に呼び出しても、その期間中に更新されないことを意味します。

Django のテンプレート タグを調べて{% cache %}、「人気のあるコンテンツ」テンプレート ビューを最小限にキャッシュされたラッパー (テスト用に 1 秒のキャッシュ時間) 内にラップしようとしました。これは機能します (手動で Google API を呼び出してページをリロードすると、テンプレートが変更されます)、意図したとおりに機能するかどうかはわかりません。基本的に、ページ全体をキャッシュしたくない数秒 (むしろ数時間) かかりますが、Google から新しいデータを取得したときに更新したいと考えています。

ここで正しい方向に誰かが私に微調整を与えることができますか?

4

1 に答える 1

1

質問が正しく理解できた場合、非同期ジョブは、新しいデータがフェッチされたときに関連するキャッシュ キーを無効にする必要があります。

テンプレートには次のものがあります。

{% cache 6000 some-page-identifier %}

非同期タスクでは、次のようにデータを無効にします。

def fetch_data():
    # Fetch data first
    # Then invalidate the cached item
    cache.delete('some-page-identifier')
于 2012-11-10T15:45:07.283 に答える