まず、この通常のキャッシュ プロセスがどのようなものかを見てみましょう。以下の図に示すように:
最初にユーザーがこの何かにアクセスし、次にこの何かが Redis にアクセスすることがわかります。Redis にアクセス データがある場合、Redis は直接アクセスします。キャッシュから取得したデータを返します。データが Redis キャッシュに見つからない場合は、MySql データベースでクエリが実行されます。結果があれば、MySql で見つかったデータが Redis キャッシュに同期され、クエリが実行されます。結果が返されます。
これは単純な通常のキャッシュ プロセスです。それでは、この通常のキャッシュ プロセスに基づいてキャッシュ アバランシェがどのようなものであるかを見てみましょう。
まず、例をあげますと、ダブルイレブンの期間中、東洞で何かを買うとき、そのホームページに入りますが、ダブルイレブンなので、ホームページへのアクセス数が非常に多く、そのため、ホームページには大量のデータが Redis にキャッシュされます。
ホームページ データが Redis の 100 キーに保存され、キャッシュの有効期限が 2 時間に設定されているとします。ダブル イレブン期間中、2 時間以上買い物をした後、ホームページ データの Redis キャッシュはすべてが瞬時に失敗し、すべてのリクエストが MySql データベースにヒットします。このとき、データベースへのアクセス圧力が増大し、MySql データベースが時間内に応答できずにハングアップします。その結果、ドンドンのホームページは外部サービスの提供を続けることができなくなり、ドン兄弟は非常に不満になり、今回の担当技術者をアフリカに派遣しました。
それでは、この例を通して、次の図を見てみましょう:
つまり、ユーザーが何かにアクセスすると、大量のキーが表示されます。 redis が無効なため、この Dong がデータベースに直接アクセスし、データベースに大量のリクエストが送信されるこの現象が Cache Avalanche です。簡単に言うと、まさに雪崩が起きているかのように、大量のredisキャッシュが同時に無効化されてしまうのです。
それでは、雪崩のキャッシュに対する解決策は何でしょうか?
# このキャッシュの有効期限を設定して、多数のキーが同時に無効になるのを防ぎます。キャッシュでは、キーの有効期限を設定できます。時間は に分散されます。
通常、Redis はクラスター内にデプロイされます。これらのホット スポットのキーが異なる Redis ノードに均等に分散されるように、これらのホット スポットのキーを異なるノードに配置できます。 。 優れた###。
さらに乱暴な方法もあります。これは、キャッシュの有効期限を設定せず、キーが期限切れにならないようにするというものです。
キャッシュ侵入です。キャッシュペネトレーションとは、簡単に言うと、キャッシュやデータベースにそのようなデータが存在しない状態を指し、一般的には通常のユーザーはアクセスしない状態です。
したがって、キャッシュ侵入の解決策は次のとおりです。リクエストが Redis を通過してデータベースに直接送信される場合、どのような結果が見つかっても問題はありません。データベース内のリクエストは Redis キャッシュに書き戻されるため、次回同じパラメータでリクエストが送信されると、そのリクエストは Redis キャッシュによって直接インターセプトされ、データベース にヒットされません。
要求されたパラメータの有効性を確認してください。
より直接的で単純かつ粗雑な方法は、この IP をブラックリストに登録することです。
最後に、ブルーム フィルターを使用します。これは非常に良い方法です。
最後の問題であるキャッシュの内訳について話しましょう。
ダブル イレブンを例に挙げてみましょう。ダブル イレブンの期間中、ドン兄弟は大きなイベントを開催したいと発表し、20 年前に使用していたコンピューターをオークションに出品したいと言いました。私はこのコンピュータに興味があったので、Dong Ge さんは Double eleven の 9 時にそのコンピュータをオークションに出すことにしました。その後、Dong 氏の開発プログラマーはコンピュータのデータを Redis キャッシュに置きました。Redis キャッシュは Redis キャッシュのキーに対応します。
オークション中、誰もが非常に熱心でした。オークションは 3 時間近く続きました。オンライン オークションはまだ終了していませんが、このコンピューターに対応する Redis キャッシュ キーの有効期限は 3 日半です。 。 時間。全員が 3 時間半オークションを行っていたとき、このコンピューターのキャッシュ キーが突然無効になり、その結果、大量のオークション リクエストが Redis 内のデータを見つけることができず、これらの大量のリクエストが直接アクセスされました。このとき、データベースの瞬間的な圧力が増加し、システムの応答が間に合わずハングアップします。
このとき、ドン兄弟は自分のコンピュータがまだオークションに出品されていないのを見て少し怒ったため、プログラマーをアフリカに送りました。
同様に、次の図を見てみましょう:
#ユーザーは特定の Web サイトにアクセスし、Redis にアクセスしてオークションのフラッシュ セール商品をリクエストします。キャッシュに無効化はありません。現時点では、redis はクエリされたキャッシュ キーの結果を返すことができますが、キャッシュ キーが無効になると、リクエストは redis を通過してデータベースに直接ヒットします。
ここで皆さんが注意すべき点は、これが特定のホットスポットのキーであるということです。 このホットスポットのキーには、多数のユーザー リクエストがアクセスし続けています。このホットスポットのキーが突然故障した場合、すべてのリクエストはブロックされます。データベースにとって、このプロセスは キャッシュ ブレークダウン と呼ばれます。 これが非常にホットなスポットに侵入するための鍵であることを忘れないでください。 このキャッシュの故障に対する解決策は次のとおりです。
。
。
以上がJava MQ メッセージキューの基本的な知識は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。