Redis キャッシュとは何ですか?
Redis キャッシュは、ANSIC 言語で書かれたオープンソースのログタイプの Key-Value データベースで、ネットワークをサポートし、メモリベースで永続化でき、複数の言語で API を提供します。
Redis キャッシュの役割は何ですか?
Redis キャッシュを使用すると、特にデータ クエリにおいて、アプリケーションのパフォーマンスと効率が大幅に向上します。しかし同時に、いくつかの問題ももたらします。中でも最も重要な問題はデータの整合性であり、厳密に言えばこの問題には解決策がありません。データの一貫性要件が非常に高い場合、キャッシュは使用できません。
もう 1 つの典型的な問題は、キャッシュの侵入、キャッシュなだれ、キャッシュの故障です。現在、業界には比較的人気のあるソリューションもあります。この記事は、これら 3 つの問題をより完全に解決することを目的としたものではなく、また、業界で一般的なソリューションを破壊することを目的としたものでもありません。代わりに、実際のコード操作を通じてこれら 3 つの問題現象を示します。このような理由は、これらの問題は学術的な説明だけでは頭の中に鮮明に概念を思い浮かべることが難しいためであり、実際のコードのデモンストレーションを行うことで、これらの問題への理解と理解を深めることができるからです。
キャッシュ ペネトレーション
キャッシュ ペネトレーションとは、データベースに存在してはいけないデータのクエリを指します。キャッシュを使用する通常のプロセスは、大まかに言うと、データ クエリが最初にキャッシュ クエリを実行し、キーが存在しない場合、またはキーの有効期限が切れている場合は、データベースにクエリを実行し、クエリされたオブジェクトをキャッシュに入れます。データベース クエリ オブジェクトが空の場合、キャッシュには配置されません。
#コード フロー##1. パラメータをオブジェクトの主キー ID に渡します
#2. キーに基づいてキャッシュからオブジェクトを取得します3. オブジェクトが空でない場合は、直接戻ります4. オブジェクトが空の場合は、データベースをクエリします#5. データベースからクエリされたオブジェクトが空でない場合は、それを配置しますキャッシュ内 (有効期限を設定) 想像してください。この場合、渡されたパラメーターが -1 の場合はどうなるでしょうか?この -1 は絶対に存在しないオブジェクトです。データベースは毎回クエリされ、すべてのクエリは空になり、キャッシュは毎回実行されるわけではありません。悪意のある攻撃があった場合、この脆弱性が悪用されてデータベースに圧力をかけたり、データベースを破壊したりする可能性があります。 UUID を使用した場合でも、存在しない KEY を見つけて攻撃することは容易です。
私の作業では、エディターは Null 値をキャッシュする方法を使用します ([コード プロセス] のステップ 5)。データベースからクエリされたオブジェクトが空の場合、それもキャッシュに入れられます。設定されたキャッシュのみ 有効期限は短くなり、たとえば 60 秒に設定されます。
(学習ビデオ共有:
redis ビデオ チュートリアル)
キャッシュ アバランチとは、特定の時間セグメントを指します。キャッシュの集中期限切れ。 雪崩の理由の 1 つは、私がこの記事を書いている時点ではダブル 12 の真夜中近くであり、まもなくパニック買いの波が起こるでしょう。この製品の波はさらに集中的に投入されるでしょう。 . 1 時間を想定したキャッシュ。その後、午前 1 時に、この製品バッチのキャッシュの有効期限が切れました。この製品バッチに対するアクセス クエリはすべてデータベースに送信され、データベースに定期的な圧力ピークが生成されます。
編集者が電子商取引プロジェクトに取り組んでいるとき、彼は通常、さまざまなカテゴリの商品を使用し、それらをさまざまな期間にわたってキャッシュします。同じカテゴリの製品にランダムな要素を加えたもの。これにより、キャッシュの有効期限を可能な限り分散することができ、また、人気のあるカテゴリの商品のキャッシュ時間が長くなり、人気のないカテゴリの商品のキャッシュ時間が短くなり、キャッシュサービスのリソースを節約することもできます。
実際には、集中有効期限切れはそれほど致命的ではありませんが、より致命的なキャッシュ雪崩は、キャッシュ サーバーのノードがダウンしているか、ネットワークから切断されている場合に起こります。自然に発生するキャッシュなだれは、一定期間に集中的にキャッシュを作成する必要があるため、データベースはその時の圧力に耐えることができ、データベースもその圧力に耐えることができます。これはデータベースに対する定期的な負荷に他なりません。キャッシュ サービス ノードのダウンタイムはデータベース サーバーに予期せぬ圧力をかけ、データベースが瞬時に超過してしまう可能性が非常に高くなります。
キャッシュ ブレークダウンキャッシュ ブレークダウンとは、非常にホットで常に大量の同時実行を実行するキーを指します。大規模な同時実行では、キーの有効期限が切れたときに、このポイントにアクセスすることに重点が置かれます。 、継続的に大規模な同時実行がキャッシュを突破し、データベースに直接リクエストすることは、バリアに穴を開けるようなものです。 編集者が電子商取引プロジェクトに取り組んでいたとき、この商品は「注目のアイテム」になりました。
実際には、ほとんどの場合、この種の爆発がデータベース サーバーに圧倒的な圧力を引き起こすことは困難です。このレベルに達している企業はほとんどありません。そのため、プラグマティックエディターでは主要製品についてはキャッシュが期限切れにならないよう早めの準備を行っています。たとえ一部の商品がそれ自体で人気になったとしても、期限を設定しないように設定するだけで済みます。
簡単に言うと、ミューテックス キーのミューテックス ロックは実際には役に立ちません。
学習チュートリアルの共有:
redis データベース チュートリアル以上がRedis キャッシュ雪崩、キャッシュ ブレークダウン、キャッシュ ペネトレーションとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。