この記事では、Redis に関する関連知識を提供します。主に、キャッシュの侵入、キャッシュの破壊、キャッシュなだれという 3 種類のキャッシュの問題について紹介します。皆様のお役に立てれば幸いです。
実際のビジネス シナリオでは、Redis は通常、リレーショナル データベースなどのバックエンド データベース への負荷を 軽減するために、他のデータベース と組み合わせて使用されます。データベース MySQL を使用します。
Redis は、ホット データなどの 頻繁にクエリされるデータを MySQL にキャッシュします。そのため、ユーザーがアクセスするときに、MySQL でクエリを実行する必要はなく、Redis でキャッシュされたデータを直接取得できるため、バックエンド データベースに対する読み取りの負荷が軽減されます。
ユーザーがクエリしたデータが Redis で利用できない場合、ユーザーのクエリ リクエストは MySQL データベースに転送されます。MySQL がデータをクライアントに返すとき、データもキャッシュされます。 Redis の にあるデータを保存することで、ユーザーが再度読み取るときに Redis から直接データを取得できるようになります。フローチャートは次のとおりです。
もちろん、キャッシュの侵入Redis をキャッシュ データベースとして常に使用できるわけではありません。順風満帆ですが、よくある 3 つのキャッシュの問題 :
##キャッシュの侵入
2.1 はじめに- # に遭遇します。 #キャッシュの内訳
- キャッシュなだれ
- #、キャッシュの侵入
とは、ユーザーが特定のデータをクエリすると、そのデータが Redis に存在しないことを意味します。このデータは、キャッシュがヒットしません。この時点で、クエリ リクエストは永続化レイヤー データベース MySQL に転送されます。データが MySQL に存在しないことがわかります。MySQL は空のオブジェクトのみを返すことができます。これは、クエリが失敗したことを意味します。 このタイプのリクエストが多すぎる場合、またはユーザーがこの種のリクエストを使用して悪意のある攻撃を実行すると、MySQL データベースに多大な負荷がかかり、データベースが崩壊することもあります。この現象はキャッシュ侵入と呼ばれます。
#2.2 解決策
空のオブジェクトをキャッシュする
MySQL が空のオブジェクトを返すと、Redis はオブジェクトをキャッシュし、有効期限を設定します。
ユーザーが同じリクエストを再度開始すると、空のオブジェクトがキャッシュから取得されます。ユーザーのリクエストはキャッシュ層でブロックされるため、バックエンド データベースが保護されますが、このアプローチにはいくつかの問題もあり、リクエストは MSQL に入ることができませんが、Redis キャッシュ スペースを占有します。 #ブルーム フィルター
ユーザーがアクセスできるフィルターを最初に配置します。ホットスポット データのすべてのキーは、ブルーム フィルター (キャッシュの予熱とも呼ばれます) に保存されます。ユーザーがリクエストすると、まずブルーム フィルター、
ブルーム フィルターを通過します。要求されたキーが存在するかどうかを判断します。。キーが存在しない場合、リクエストは直接拒否されます。そうでない場合、クエリは実行され続けます。最初にキャッシュにアクセスしてクエリを実行します。キャッシュが存在しない場合は、 、次にデータベースに移動してクエリを実行します。最初の方法と比較して、 ブルーム フィルター方法を使用する方が効率的かつ実用的です。 プロセス図は次のとおりです。
##キャッシュの予熱: キャッシュの予熱を指します。システムが開始されます。 関連するデータが Redis キャッシュ システムにロードされます。これにより、ユーザーが要求したときにデータをロードすることがなくなります。
2.3 ソリューションの比較
両方のソリューションはキャッシュ侵入の問題を解決できますが、使用シナリオは異なります:
#3. キャッシュの内訳3.1 はじめに空のオブジェクトをキャッシュする: 空のデータのキーの数が限られており、キー要求が繰り返される可能性が高いシナリオに適しています。
ブルーム フィルター: 空のデータのキーが異なり、キー要求が繰り返される可能性が低いシナリオに適しています。
3.2 解決策キャッシュの内訳とはユーザーによってクエリされたデータはキャッシュには存在しませんが、バックエンド データベース には存在します。この現象の理由は、通常、 はキャッシュ 内のキーの有効期限切れによって引き起こされるためです。たとえば、ホット データ キーは常に大量の同時アクセスを受けますが、ある瞬間にキーに突然障害が発生すると、大量の同時リクエストがバックエンド データベースに入り、その負荷が瞬時に高まります。この現象をキャッシュブレイクといいます。
有効期限を変更する
ホットスポット データを無期限に設定する。
分散ロック
分散ロック方式を採用してキャッシュを再設計します。
- Lock: キーでデータをクエリするときは、まずキャッシュをクエリします。ロックは分散ロックを通じて実行され、ロックを取得する最初のプロセスはバックエンド データベースにアクセスしてクエリを実行し、クエリ結果を Redis にバッファリングします。
- ロック解除: 他のプロセスは、ロックがプロセスによって占有されていることを検出すると、待機状態に入ります。ロックを解除した後、他のプロセスはキャッシュされたキーに順番にアクセスします。 . .
無期限: このソリューションには実際の設定がありません。有効期限を設定すると、実際にはホット キーによって引き起こされる一連の危険が排除されますが、データの不整合が発生し、コードの複雑さが増加します。
Mutex lock: この解決策は比較的シンプルですが、キャッシュの構築プロセスに問題がある場合や、時間がかかる場合には、特定の隠れた危険性があります。ロックやスレッド プールのブロックのリスクはありますが、この方法によりバックエンド ストレージの負荷が軽減され、より良い一貫性が実現されます。
4. キャッシュなだれ4.1 はじめに##キャッシュなだれとは、キャッシュ内の 大きなバッチを指します。同時にキーの有効期限が切れ、このときのデータ アクセス量が非常に多くなるため、バックエンド データベースへの負荷が急激に高まり、クラッシュすることもあります。この現象はキャッシュ雪崩 と呼ばれます。キャッシュブレークダウンとは異なります。キャッシュブレークダウンは同時実行量が特に多いときに特定のホットキーが突然期限切れになるときに発生しますが、キャッシュアバランシェは多数のキーが同時に期限切れになるときに発生するため、同じ順序ではありません。まったく規模が大きい。
#4.2 解決策
有効期限の処理
キャッシュ雪崩とキャッシュ ブレークダウンは似ているため、ホットスポット データは期限切れにならない
メソッドを使用して、多数のキーの同時有効期限を減らすこともできます。さらに、キーの有効期限が集中的に失われるのを避けるために、キーにランダムな有効期限を設定します。redis の高可用性
雪崩により 1 つの Redis がハングする可能性があるため、さらにいくつかの Redis を追加できます, クラスターを構築します。1 つが失敗しても、他のクラスターは引き続き動作します。
推奨学習: Redis 学習チュートリアル
以上がRedis の 3 つのキャッシュの問題について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール
