目次
1. キャッシュ アバランチ
1. とはキャッシュ雪崩?
キャッシュなだれの原因にはさまざまな解決策があります:
1. キャッシュ ブレークダウンとは
キャッシュ ブレークダウンはキャッシュなだれに似ています。データの有効期限が切れており、キャッシュ ブレークダウンはホットスポット データの有効期限を指します。次の図に示すように、ホットスポット データに対するすべてのリクエストはデータベースで処理する必要があります:
キャッシュの故障を解決する 3 つの方法:
3. キャッシュ ペネトレーション
1. キャッシュ ペネトレーションとは
2. キャッシュペネトレーションが発生する理由
3. キャッシュの侵入を回避するにはどうすればよいですか?
a. キャッシュの空の値またはデフォルト値
b. ブルーム フィルター
4. 概要
ホームページ データベース Redis Redis キャッシュの雪崩、破壊、侵入を解決する方法

Redis キャッシュの雪崩、破壊、侵入を解決する方法

Nov 03, 2022 pm 05:23 PM
redis nosql 後部

この記事では、Redis に関する関連知識を提供します。主に、Redis キャッシュ雪崩、ブレークダウン、および侵入に関連する問題の解決方法を紹介します。キャッシュ雪崩とは、大量のリクエストを指します。キャッシュされたデータは、 Redis がヒットできない、つまり Redis 内でデータが見つからないということですが、見てみましょう。

Redis キャッシュの雪崩、破壊、侵入を解決する方法

推奨学習: Redis ビデオ チュートリアル

1. キャッシュ アバランチ

1. とはキャッシュ雪崩?

キャッシュ雪崩とは、Redisのキャッシュされたデータにヒットできない、つまり##でデータが見つからない大量のリクエストを指します。 #Redis の場合、ビジネス システムはデータベースに対してのみクエリを実行できるため、すべてのリクエストがデータベースに送信されます。以下の図に示すように:

データベースは

Redis ほど大量のリクエストを処理できません。キャッシュ雪崩が発生するとデータベースがダウンすることは間違いなく、業務システムへの影響は避けられないため、キャッシュ雪崩が発生すると業務システムにとって致命的となることは間違いありません。

2. キャッシュ雪崩はなぜ起こるのでしょうか?

キャッシュ雪崩はどのような状況で発生しますか?要約すると、理由は 2 つあります。

  • 多数の

    Redis キャッシュ データの有効期限が同時に切れたため、すべてのリクエストが Redis# に送信されました。 ## 失敗します。ヒット データはデータベース内でのみクエリできます。

  • Redis

    サーバーがダウンしているため、すべてのリクエストを Redis 経由で処理できず、データベースに問い合わせてデータをクエリすることしかできません。

  • 3. キャッシュ雪崩を回避するにはどうすればよいですか?

キャッシュなだれの原因にはさまざまな解決策があります:

    ランダムなキャッシュ有効期限が多数ある場合、解決策は元の有効期限を追加することです。大量のキャッシュされたデータが同時に期限切れになるのを避けるため、ランダムな有効期限 (1 ~ 5 分のランダムな有効期限など)。
  • Redis

    によって引き起こされるキャッシュ雪崩を解決するには、データ同期のために事前に Redis マスター/スレーブ サーバーを設定します。 Redis サーバーがダウンタイムによりサービスを提供できない場合に、センチネルが Redis スレーブ サーバーをマスター サーバーに設定してサービスを提供し続けることができるように、センチネル メカニズムを構成します。

  • 2. キャッシュ ブレークダウン

1. キャッシュ ブレークダウンとは

キャッシュ ブレークダウンはキャッシュなだれに似ています。データの有効期限が切れており、キャッシュ ブレークダウンはホットスポット データの有効期限を指します。次の図に示すように、ホットスポット データに対するすべてのリクエストはデータベースで処理する必要があります:

2 . キャッシュの侵入を回避するにはどうすればよいでしょうか?

キャッシュの故障を解決する 3 つの方法:

有効期限を設定しない
  • 特定のデータがホット データであることが事前にわかっている場合は、キャッシュの故障の問題を避けるために、これらのデータの有効期限を設定することはできません。たとえば、フラッシュ セールの一部の商品は、フラッシュ セール中に多数のユーザーによってアクセスされます。この時点で、フラッシュ用の商品データを書き込むことができます。有効期限を設定するのではなく、売上を事前にキャッシュに保存します。

ミューテックス ロック
  • 特定のデータが大量にアクセスされることが事前にわかっている場合は、もちろん期限切れにならないように設定できますが、多くの場合、期限切れにならないように設定できます。 、事前に予測することはできませんが、この状況にどう対処すればよいでしょうか?

キャッシュの故障状況を分析してみましょう:

通常の状況では、特定の

Redis

キャッシュ データの有効期限が切れたときに、データに対するリクエストがある場合は、再クエリします。データベースに保存し、キャッシュに書き込むことで、後続のリクエストがデータベースに再度クエリを実行することなくキャッシュにヒットできるようになります。 リクエストが大量にあるためにホットスポット データの有効期限が切れると、リクエストがキャッシュにヒットできない場合、データベースがクエリされ、データが

Redis

に書き換えられます。 Redis以前は、他のリクエストが受信されると、データベースもクエリされていました。 わかりました。ホットスポット データの有効期限が切れた後、多くのリクエストがデータベースをクエリすることはわかっています。そのため、データベースをクエリするビジネス ロジックにミューテックス ロックを追加できます。ロックを取得したリクエストのみがデータベースをクエリできます。データは

Redis

に書き戻されますが、ロックを取得していない他のリクエストはデータの準備ができるまで待つことしかできません。 上記の手順を次の図に示します:

  • 論理有効期限の設定

ミューテックス ロックを使用するとキャッシュの故障の問題を非常に簡単に解決できますが、ロックを取得しないリクエストはキューに入れられ、パフォーマンスに影響します。キャッシュの故障を解決するもう 1 つの方法は、ビジネス データの冗長性に有効期限を追加することです。たとえば、次のデータでは、データの有効期限を示すために expire_at フィールドを追加しました。

{"name":"test","expire_at":"1599999999"}复制代码
ログイン後にコピー

このメソッドの実装プロセスを次の図に示します。

キャッシュ内のホットスポット データには冗長な論理有効期限がありますが、データは Redis有効期限を設定しない

リクエストが Redis でデータを取得するときに、論理有効期限が切れているかどうかを確認します。有効期限が切れていない場合は、有効期限が切れると、ロックを取得するために別のスレッドが開かれ、データベースにクエリを実行し、クエリされた最新のデータを Redis に書き戻し、現在のリクエストはクエリされたデータを返します。

3. キャッシュ ペネトレーション

1. キャッシュ ペネトレーションとは

キャッシュ ペネトレーションとは、検索対象のデータがキャッシュにもデータベースにも存在しないことを意味します。 Redis次の図に示すように、キャッシュは名前だけです:

2. キャッシュペネトレーションが発生する理由

キャッシュペネトレーションはどのような状況で発生しますか?主に 3 つの状況があります:

  • 悪意のあるユーザーの攻撃要求

  • Redis とデータベース内のデータの悪意のある操作削除されました

  • ユーザーが記事リストなどのコンテンツをまだ生成していない場合、ユーザーは記事を書いていないため、キャッシュとデータベースにデータはありません

3. キャッシュの侵入を回避するにはどうすればよいですか?

a. キャッシュの空の値またはデフォルト値

Redis キャッシュにデータをクエリできない場合は、データベースから再度クエリします。データがない場合は、スペースまたはデフォルト値を直接キャッシュして、次回データベースへのクエリを回避します。ただし、データベースがデータベースに応答して null 値を返すことを防ぐために、キャッシュに有効期限を設定するか、対応するデータをキャッシュする必要があります。データ生成時に直接クリアされるため、空の値をキャッシュします。

b. ブルーム フィルター

null 値をキャッシュすることでキャッシュ侵入の問題は解決できますが、データが存在するかどうかを確認するためにデータベースに一度クエリを実行する必要があります。ユーザーによる同時実行性の高さ システム内に存在しないデータ ID を使用してクエリを実行するには、すべてのクエリがデータベースを通過する必要があり、データベースに大きな負荷がかかります。

それでは、データベースにクエリを行わずにデータが存在するかどうかを確認する方法はあるのでしょうか?はい、ブルームフィルターを使用してください。

ブルーム フィルターは主に 2 つの部分で構成されています: ビット配列 N ハッシュ関数原理は次のとおりです:

  • N ハッシュ関数を使用して、データがハッシュ化されていることをマークします。

  • 計算されたハッシュ値をビット配列の長さで割って取得し、ビット配列内の各ハッシュ値の位置を取得します。

  • ビット配列内の対応する位置を 1 としてマークします。

ブルーム フィルターの原理の概略図を以下に示します。

データを書き込む場合は、説明されている手順を実行します。上記を計算すると、ビット配列の位置に対応し、1とマークされます。クエリを実行すると、データが存在するかどうかを確認できます。

また、ハッシュ衝突問題によるエラーのため、ブルームフィルター通過後に存在しないデータが存在すると判断され、データベースがチェックされますが、ハッシュ衝突の確率はブルーム フィルターを使用すると、ほとんどの侵入リクエストを阻止できるようになります。

Redis 自体がブルーム フィルターをサポートしているため、自分で実装することなく Redis ブルーム フィルターを直接使用でき、非常に便利です。

4. 概要

キャッシュ雪崩、ブレークダウン、およびペネトレーションは、ビジネス アプリケーションをキャッシュするときによく発生するキャッシュ例外の問題であり、その原因と解決策は次のとおりです。

##問題原因解決策キャッシュ雪崩A大量のデータの有効期限が切れるか、サーバーがクラッシュするキャッシュの内訳ホットスポット データの有効期限1. 有効期限を設定しない 2. ミューテックス ロックを追加する 3. 冗長な論理有効期限 キャッシュの侵入データベースと 推奨される学習: Redis ビデオ チュートリアル
Redis1. ランダムな有効期限 2. マスター/スレーブセンチネルクラスター
Redis 1 で利用できないデータを要求します1. キャッシュの空の値またはデフォルト値 2. ブルーム フィルター

以上がRedis キャッシュの雪崩、破壊、侵入を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisデータをクリアする方法 Redisデータをクリアする方法 Apr 10, 2025 pm 10:06 PM

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redisコマンドの使用方法 Redisコマンドの使用方法 Apr 10, 2025 pm 08:45 PM

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

Redisのソースコードを読み取る方法 Redisのソースコードを読み取る方法 Apr 10, 2025 pm 08:27 PM

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

Redisロックの使用方法 Redisロックの使用方法 Apr 10, 2025 pm 08:39 PM

Redisを使用して操作をロックするには、setnxコマンドを介してロックを取得し、有効期限を設定するために有効期限コマンドを使用する必要があります。特定の手順は次のとおりです。(1)SETNXコマンドを使用して、キー価値ペアを設定しようとします。 (2)expireコマンドを使用して、ロックの有効期限を設定します。 (3)Delコマンドを使用して、ロックが不要になったときにロックを削除します。

Redisキューの読み方 Redisキューの読み方 Apr 10, 2025 pm 10:12 PM

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redis用のメッセージミドルウェアの作成方法 Redis用のメッセージミドルウェアの作成方法 Apr 10, 2025 pm 07:51 PM

Redisは、メッセージミドルウェアとして、生産消費モデルをサポートし、メッセージを持続し、信頼できる配信を確保できます。メッセージミドルウェアとしてRedisを使用すると、低遅延、信頼性の高いスケーラブルなメッセージングが可能になります。

See all articles