0

連続データをユーザーに提示するアプリケーションがあるとします。例: ブログ - ブログ エントリのリストを表示し、このリストはページに分割されているため、最終的に /page1、/page2 などになります。

明らかに最初のページが最も頻繁にリクエストされますが、ページ数が多いほどリクエストされる頻度は低くなります。

アプリにキャッシュを実装する場合、次の 2 つの選択肢があります。

  • 新しいエントリごとにすべてのページのキャッシュを更新する

  • ページがリクエストされると、PHP はキャッシュされたバージョンを探します。存在する場合はそれが返され、そうでない場合は有効期限が 1 時間に設定された状態でキャッシュが作成されます。

最初の解決策は、私にとって本当にリソースの無駄のように思えます。2 つ目は、危険なシナリオの可能性を生み出します。

ユーザーがページ x を要求し、次に (x+1) を要求した場合、ページ x はキャッシュされ、ページ (x+1) はキャッシュされていない場合はどうなりますか? ページ x のキャッシュが古い場合、ページ (x+1) のユーザーには同じコンテンツが表示されます。さらに悪いことに、ユーザーが x ページから (x-1) ページに移動した場合はどうなるでしょうか? 彼はいくつかのエントリを逃すでしょう!

この問題を回避するためにキャッシュを実装する方法は?

4

1 に答える 1

0

そこで行われた作業が無駄にならないと確信できない限り、熱心にキャッシュするのではなく、通常はオンデマンドでキャッシュするのが最善です。

通常、一時データを保持する Memcached のようなバッキング ストアを使用します。これは、古くなったものや使用されていないものを自動的に期限切れにする「time-to-live」(TTL) で構成できます。

通常、ページのかなりの部分を文字列にキャッシュしてから、何らかの識別キーを使用して保存します。あなたの場合、ページの URL またはパラメーターの一部のサブセットが十分に一意である可能性があります。ユーザー セッションがこのセクションの内容に影響を与える場合user_idは、キャッシュ キーの一部など、それに関連するものもあることに注意してください。

于 2012-10-30T18:13:15.980 に答える