この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 10734|答える: 0

[レディス] 例として、Redisのキャッシュ貫通、キャッシュアバランチ、キャッシュのブレイクダウンについて説明します

[リンクをコピー]
掲載地 2019/11/19 9:55:04 | | | |
Redisキャッシュの利用は、特にデータクエリにおいてアプリケーションのパフォーマンスと効率を大幅に向上させます。 しかし同時に、いくつかの問題ももたらします。 その中でも最も重要な問題はデータの一貫性であり、これは厳密に解けません。 データの一貫性が必要な場合、キャッシュは使用できません。

その他の典型的な問題には、キャッシュ貫通、キャッシュ崩壊、キャッシュブレークダウンがあります。 現在、業界内ではより人気のあるソリューションも存在しています。 この記事はこれら三つの問題をより完璧に解決するためのものでも、業界で人気のある解決策を覆すものでもありません。 代わりに、実際のコード演算からこれら3つの問題現象を実証します。 その理由は、これらの問題の学術的な説明を見るだけでは頭の中に鮮明な概念を持つのが難しく、実際のコードデモンストレーションでこれらの問題の理解を深めることができるからです。

キャッシュ貫通

キャッシュ貫通とは、データベースに存在しないデータをクエリすることを指します。 キーが存在しないか、キーが期限切れの場合はデータベースにクエリが行われ、クエリ対象のオブジェクトはキャッシュに格納されます。 データベースクエリオブジェクトが空であれば、キャッシュされていません。



コードフロー

  • パラメータはオブジェクトのプライマリキーIDを渡します
  • キーに基づいてキャッシュからオブジェクトを取得します
  • オブジェクトが空でなければ、直接戻ります
  • オブジェクトが空の場合はデータベースクエリを実行します
  • データベースからクエリされたオブジェクトが空でなければ、それをキャッシュに入れ(有効期限を設定します)。この状況を想像してください。もし渡されたパラメータが-1だったらどうなるでしょうか? この-1は存在してはならない対象です。 データベースは毎回クエリされ、各クエリは空になり、毎回キャッシュされるわけではありません。 悪意のある攻撃があれば、この脆弱性はデータベースに圧力をかけたり、圧倒したりするために悪用される可能性があります。 UUIDが使われても、存在しないキーを見つけて攻撃するのは簡単です。


私の作業では、null値をキャッシュする方法、つまり[コードプロセス]のステップ5を用います。データベースからクエリされたオブジェクトが空であれば、それもキャッシュに入れますが、設定されたキャッシュの有効期限は短く、例えば60秒に設定します。




キャッシュアバランチ

キャッシュアバランチとは、キャッシュセットが一定期間内に期限切れになることを指します。

例えばこの記事を書いている時点で、雪崩の理由の一つは、もうすぐ12日目の0時で、ラッシュ購入の波が起こるということです。 そして午前1時にこの一群の在庫が期限切れになります。 このロットのアクセスクエリはデータベースに割り当てられ、データベースでは定期的に圧力のピークが発生します。

シャオビアンがeコマースプロジェクトを行う際、一般的に異なるカテゴリーの商品を採用し、異なるサイクルをキャッシュします。 同じカテゴリーの財にランダム要素を加えたもの。 この方法により、キャッシュの有効期限をできるだけ分散させ、人気カテゴリの商品キャッシュ時間が長くなり、人気のないカテゴリの商品キャッシュ時間が短くなることで、キャッシュサービスのリソースを節約できます。




実際、中央集権的期限切れは致命的ではなく、より致命的なキャッシュ雪崩はキャッシュサーバーのノードがダウンしたり切断したりすることです。 自然に発生するキャッシュアバランシェは一定期間内に生成されなければならず、その場合データベースは圧力に耐えられ、この時点でもデータベース自身もその圧力に耐えられます。 それは単にデータベースへの定期的な圧力に過ぎません。 キャッシュサービスノードのダウンタイムはデータベースサーバーに予測不能な負荷をかけ、瞬時にデータベースを圧倒する可能性があります。

キャッシュ内訳

キャッシュブレイクダウンとは、非常にホットなキーで、常に大きな並行性を保持している状態を指します。大きな並行性はこのポイントへのアクセスに集中します。このキーが失敗すると、連続的な大規模並行性がキャッシュを突破し、バリアに穴を開けるように直接データベースを要求します。

シャオビアンがECプロジェクトを行っていた際、この製品は「ヒット」となりました。

実際、多くの場合、このような爆発的な動きはデータベースサーバーに圧迫的な圧力をかけるのが難しい。 このレベルに達した企業はごくわずかです。 したがって、実用的なエディターは主要な製品の準備を早めにしており、キャッシュが期限切れにならないようにしています。 たとえ一部の製品が発酵してヒットになっても、賞味期限を持たない設定にできます。

メインロードはシンプルで、ミューテックスキーの相互拒否ロックはほとんど使われていません。





先の:MySql 8.0 セキュア接続を使うか、サーバーのRSAを指定するか...
次に:外部ホストサービスにアクセスするためのDockerコンテナ
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com