もちろん、すべてはタスクに依存します。つまり、アプローチはどこでも異なります。 キャッシングが必要な場合とキャッシングが不要なニュースサイトの例について、そしてもちろん、例を挙げて説明します。
キャッシングの基本の続き。 練習する
キャッシングを使用する必要がありますか?
すべてのキャッシュを開始する前に、必要かどうかを判断しますか? 次の2つの場合に必要になることがあります。
-サーバー負荷の削減。 ここではすべてが明らかです。サーバーは
-ページ生成時間の短縮。 出力に時間がかかる前にデータを処理する場合があります。 毎回処理する代わりに、一度処理してキャッシュに入れることができます。 その結果、キャッシュからのデータは即座に返されます。
どこから始めますか?
そして、私たちはあなたが空気のようなキャッシングを必要とすることに気付きました。 しかし、彼を必要とし、彼が絶対に必要としない場所を決定する方法は? 例として、通常のニュースサイトを見てみましょう。 ほとんどの場合、データベースがボトルネックになるため、サンプルをキャッシュする必要があります。 最も訪問されたページは何ですか?
-ホーム、そのコンポーネントは多くのブロックです(最新ニュース、過去1週間に人気のあるニュース、最もコメントの多いニュース、ニュースに関する最新のコメントなど)。
-ニュース自体を表示し、そこに、そしてそれについてのコメント。
-許可されたユーザーは個人メッセージのシステムを利用できます。この場合、各ページでデータベースへのリクエストを強制的に行い、新しいメッセージが出現したかどうかを確認します。
キャッシュする必要があるもの、理解しているもの、しないものは何ですか? ここでの質問は、キャッシュする必要があるかどうかです。 たとえば、プライベートメッセージのリスト。 私たちの場合、サイトはニュースに特化しているため、ユーザーは新しいメッセージを受信したときにのみそれらを表示するため、キャッシュする必要はありません。これはまれです。
理論に到達する
キャッシュにはいくつかの戦術があります。
-廃止(特定の時間)。
-無効化(私たちは彼を永遠に、必要に応じて殺します)。
-組み合わせ(一定期間、ただし必要に応じて殺します)。
陳腐化を使用する場合、データがキャッシュされる時間は、このデータを更新する頻度と関連データを取得する重要性のレベルに応じて選択されます。 作業する場所を特定したので、始めましょう。
メインページ
このページには多くのブロックがあるため、データベースに対して多くのクエリを取得します。 メインページのコンテンツ全体をキャッシュし、10分ごとに更新することは可能ですが、ブロックのリフレッシュレートが異なるため、個別にキャッシュする必要があります。 各ブロックを検討してください。
-最新ニュース。 それを永久にキャッシュし、サイトにニュースを追加するときに殺します。
-先週の人気ニュース。 1日キャッシュします。
-最もコメントされたニュース。 1時間キャッシュします。
-最新ニュースのコメント。 永久にキャッシュし、新しいコメントを追加するときにキルします。 新しいコメントがすぐに表示される場合、ブロックを1分間キャッシュします。
ニュースを見る
ここでは、キャッシュ段階は2つの部分に分かれています-ニュース自体とそのコメントです。
a) ニュース ニュースがbb-codesで書かれており、htmlに変換するプロセスは時間がかかり、場合によっては時間がかかることもあることを想像してください(正規表現はまだCPU時間を消費します)。したがって、完成したhtmlを一度変換してキャッシュする必要があります。 ニュースを永久にキャッシュし、ニュースを変更/削除するときにキャッシュを削除します。 しかし、あなたが尋ねるビューカウンターがある場合はどうでしょうか? すべてが非常に単純で、ニュース自体のキャッシュを常に更新することは可能ですが、データの整合性違反の可能性があるため、このトリックは危険です。 これを行うために、ビューの数のキャッシュを作成します。 ニュースを表示するとき、表示キャッシュの増分だけでなく、ビューの数を更新するデータベースへのリクエストがあります。 ここでは、キャッシュを永久にキャッシュし、削除時にニュースを削除します。
b) コメント 。 また、コメントにbbコードを使用します。ここでは既製のhtmlコメントも保存しますが、コメントのシリアル化された配列をキャッシュします。 永久にキャッシュ、新しいコメントの追加/このニュースに関するコメントの編集/削除/ニュース自体の削除の際にキャッシュを削除します。 しかし、複数ページのコメントがある場合はどうでしょうか? すべてのコメントを1つのキャッシュに保持し、直接出力する前にページでコメントを打ちます。
新しい投稿を確認する
ここでは、負荷の種類に応じて選択されるため、キャッシング戦術を選択する前に慎重に検討する必要があります。 いくつかのオプションを考えてみましょう。
a) 通常のユーザーはほとんどいません。 永遠にキャッシュします。
b) 多くのユーザー、定期的。 それは、私たちにとってより高価なもの、メモリ(キャッシュ)、またはデータベースの負荷の軽減に依存します。 大量のメモリがあり、それをセッション中に永久にキャッシュしてもかまわない場合。
c) 一意の任意の数のユーザー。 セッションの間キャッシュします。
新しいメッセージをチェックするためのキャッシュは、新しいメッセージが受信され、ユーザーが削除されると常に削除されます。
これで理論は終わり、実践はあなた次第です。
PS。 キャッシングに精通したいが、どこから始めればよいかわからない人が役に立つことを願っています。 ご清聴ありがとうございました。