国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ データベース Redis Redis のホット キー ストレージの問題を分析し、例外をキャッシュするための解決策について説明します。

Redis のホット キー ストレージの問題を分析し、例外をキャッシュするための解決策について説明します。

May 19, 2022 am 10:15 AM
redis

この記事では、Redis の 3 つの一般的なキャッシュ異常、キャッシュの侵入、キャッシュのブレークダウン、キャッシュなだれについて説明します。これらを通じて、Redis のホット キー ストレージの問題について説明します。 !

Redis のホット キー ストレージの問題を分析し、例外をキャッシュするための解決策について説明します。

関連する推奨事項: 「Redis キャッシュの一貫性、キャッシュの侵入、キャッシュのブレークダウン、キャッシュ アバランシェの問題の分析

キャッシュの侵入、キャッシュの破壊、キャッシュなだれは、Redis のインタビューや実際の開発の際に考慮する必要があることが多い問題です。多くの人は、この問題の起源、原因、解決策についてまだ明確にしていません。実際、生成された原理を注意深く分析することで、これら 3 つの狀況に対する適切な解決策を見つけることができます。 [関連する推奨事項: Redis ビデオ チュートリアル ]

この記事は、定義、ケース、危険性、解決策を通じて、これら 3 つの問題をすばやく理解するのに役立ちます。

あなたも、これら 3 つの問題に対する多くの解決策をインターネット上で目にしたことがあるかと思いますが、これらの解決策のいくつかは 正しい解決策ですか?この記事では、そのようなソリューションの長所と短所を 1 つずつ分析します。

下の図はこの記事の內(nèi)容概要を示しており、記事ではこれらの點についても分析してまとめています。

Redis のホット キー ストレージの問題を分析し、例外をキャッシュするための解決策について説明します。

キャッシュの侵入、キャッシュの內(nèi)訳、およびキャッシュの 3 つの比較

  • 雪崩は、キャッシュ內(nèi)にデータが存在しないために発生し、データのクエリにデータベースが使用されます。

  • キャッシュされたデータが存在しないため、すべてのリクエストはデータベースに送信され、データベースに過剰な負(fù)荷がかかったり、サービスのクラッシュを引き起こしてシステム全體が使用できなくなることもあります。

#キャッシュの侵入定義: キャッシュの侵入は、クライアントが要求したデータがキャッシュに存在しないためです。 、データベースにクエリを?qū)g行しますが、クライアントがクエリしたいデータがデータベースにないため、すべてのリクエストでデータベース クエリ操作が実行されます。

本當(dāng)の問題は、データ自體が存在しないことです

。 例: クライアントが製品の詳細(xì)を要求すると、製品 ID が送信されますが、この時點では、製品 ID は (キャッシュにもデータベースにも) 存在しません。その結(jié)果、この ID を持つ製品のデータが要求されるたびに、データベースに送信されます。

ハザード: 要求されたパラメーターに対応するデータがまったく存在しないため、毎回データベースが要求され、データベースへの負(fù)荷が増大したりサービスがクラッシュしたり、さらには他のビジネス モジュールに影響を與えたりすることもあります。これは、ユーザー

が悪意のあるリクエスト

を行った場合によく発生します。

解決策:

1. 要求されたパラメーターに基づいて null 値をキャッシュします。この値に有効期限を設(shè)定すると、時間を短く設(shè)定できます。

2. ブルーム フィルターを使用します。まずブルーム フィルターでフィルターします。フィルターにブルーム フィルターが存在する場合は、データベースにクエリを?qū)g行してから、キャッシュに追加します。存在しない場合は、クライアントデータが存在しないことを直接返します。

3. キャッシュの侵入はユーザーによって開始された悪意のあるリクエストである可能性があるため、ユーザー IP を記録し、悪意のある IP リクエストをブロックすることができます。

スキーム分析:

    最初のスキームは、存在しないキーの空の値をキャッシュします。このようなリクエストが多すぎると、それらはすべて null 値のキャッシュを 1 つずつ設(shè)定するのでしょうか? このとき、Redis には無効なキャッシュ null 値が大量に存在します。このキーを商品や記事のIDとした場合、null値を設(shè)定した後、バックグラウンドでデータが追加された場合には、そのIDに対応するキャッシュ値を更新し、適切な有効期限を設(shè)定する必要があります。
  • 2 番目のソリューションは、業(yè)界で最も一般的に使用されているソリューションでもあります。ブルーム フィルターの利點は、Redis 実裝、メモリ操作に基づいており、基礎(chǔ)となる実裝も非常にメモリを節(jié)約できることです。バックグラウンドでデータが正常に追加されると、データの ID がブルーム フィルターに追加され、リクエストを行う際、フロントエンドはまずブルーム フィルターを通過してデータが存在するかどうかを確認(rèn)します。しかし、ブルームフィルターにはハッシュ競合の問題という欠點もあります。ここでのハッシュの競合は何を意味するのでしょうか?つまり、複數(shù)のIDをハッシュ化した場合、得られるハッシュビットは同じ値となり、存在確認(rèn)の際に誤判定を招くことになる。それ自體には何かがありますが、結(jié)果には何もありません。
  • ブルーム フィルターの欠點の 1 つは、存在すると言われれば必ずしも存在するとは限らず、存在しないと言われれば存在しないことを意味することです。

  • 3 番目のオプションは、一定期間內(nèi)に同じユーザーに対して多數(shù)のリクエストを開始し、キャッシュ侵入メカニズムをトリガーすることです。クライアントのアクセス。ただし、攻撃者が DDOS 攻撃を開始した場合、その攻撃を完全に回避することはできないため、このソリューションは良い解決策ではありません。
計畫の概要:

  • まず、リクエスト レベルで 3 番目のソリューションを追加し、一部の悪意のあるリクエストを制御するための電流制限メカニズムと IP ブラックリスト メカニズムを作成し、誤った判斷があった場合には IP ブロック解除などの操作を?qū)g裝します。 。キャッシュ層は最初のソリューションを使用して実裝されます。適切なキャッシュ時間を設(shè)定します。

  • 誤った判斷が許容されるビジネス シナリオの場合は、2 番目のソリューションを直接使用できます。完全に Redis に基づいているため、システムの複雑さが軽減されます。

#キャッシュ ブレークダウン

定義: 特定のホット キーが存在しないためにキャッシュ ブレークダウンが発生し、データベースがアクセスしてください。データベースに対する負(fù)荷が増大します。この圧力は一時的な場合もあれば、長期間続く場合もあります。

本當(dāng)の問題は、キーが存在してもキャッシュに存在しないため、データベース操作が発生することです。

例: 人気のある商品があり、ユーザーが商品の詳細(xì)を表示するときに、商品 ID を使用して商品の詳細(xì)を取得します?,F(xiàn)時點では、キャッシュ內(nèi)のデータの有効期限が切れているため、すべての受信リクエストはデータベースに送信されてクエリを?qū)g行する必要があります。

ハザード: キャッシュの侵入と比較すると、データはデータベースに存在しますが、キャッシュの有効期限が切れているため、データベースに一度アクセスしてからキャッシュに追加する必要があり、次のリクエストは正常に続行できます。 。いわゆる害はデータベースレベルにも向けられています。

解決策:

1. ミューテックス ロックを追加します。最初のリクエストでは、キャッシュにデータが存在しないことが判明し、この時點でクエリ データベースがキャッシュに追加されました。このようにして、後続のリクエストではデータベース クエリを?qū)g行する必要がありません。

2. ビジネス ロジックの有効期限を長くします。キャッシュを設(shè)定するときに、キャッシュの有効期限を追加できます。読み取るたびに判斷し、有効期限が現(xiàn)在時刻より短い場合は、バックグラウンド スレッドをトリガーし、データベースにアクセスしてデータを取得し、キャッシュされたデータとキャッシュされた有効期限を更新します。実際、原則は、コード レベルでキャッシュのキャッシュ期間を延長することです。

3. データのウォームアップ。バックグラウンドでキャッシュへのデータの追加を?qū)g裝します。たとえば、フラッシュ セール シーンが開始される前に、商品の在庫がキャッシュに追加され、ユーザーのリクエストが來たときに直接キャッシュに移動します。

4. 有効期限はありません。キャッシュの有効期限を設(shè)定する場合は、期限切れにならないようにしてください。これらのキャッシュの有効期限とデータ更新を維持するために、別のスレッドがバックグラウンドで開かれます。

プログラム分析:

  • ミューテックス ロックにより、データベースに送信されるリクエストが 1 つだけになることが保証されるため、これは利點です。しかし、分散システムでは、分散ロックを?qū)g裝するために分散ロックが使用されるため、分散ロックの実裝自體に一定の困難があり、システムの複雑さが増大します。

  • 2 番目のソリューションは、Redis の有効期限が切れず、ビジネスが期限切れになるソリューションを使用して実裝されます。これにより、リクエストごとにデータを確実に取得でき、バックグラウンド スレッドを使用してデータを更新することもできます。欠點は、バックグラウンド スレッドがデータの更新を完了していないことです?,F(xiàn)時點では、要求されたデータは古いデータであるため、リアルタイム性の要件が高いビジネス シナリオでは不利になる可能性があります。

  • 3 番目の解決策は、キャッシュの予熱を使用し、ロードされるたびにキャッシュすることであり、2 番目の解決策と似ています。ただし、ホットデータ更新の問題もあるため、このソリューションは高いリアルタイム性を必要としないデータに適しています。

  • 4 番目のソリューションは 2 番目と 3 番目のソリューションに似ており、これに基づいて、バックグラウンドの非同期スレッドを使用してキャッシュされたデータをアクティブに更新するという特定の最適化が行われています。難しいのは、更新の頻度を制御することです。

スキームの概要:

  • リアルタイム要件が高いデータの場合は、最初のスキームを使用することをお勧めします。技術(shù)的には難しいですが、リアルタイムにデータを処理できます。一部のリクエストが長時間待機する場合、例外が返され、クライアントはリクエストを再送信できます。

  • 高いリアルタイム パフォーマンスを必要としないデータの場合は、4 番目のソリューションを使用できます。

#キャッシュ雪崩定義: 前述のキャッシュの故障は、キャッシュ內(nèi)の特定のホット スポットが原因です。キーが失敗すると、大量のリクエストがデータベースに送信されます。ただし、キャッシュ雪崩は実際には同じですが、こちらの方が深刻で、1 つまたは 2 つのキーではなく、キャッシュされたキーのほとんどが無効です。

例: 電子商取引システムでは、特定のカテゴリの商品データがキャッシュ內(nèi)で無効です。ただし、現(xiàn)在のシステムからのリクエストの多くは、このカテゴリの製品データに対するものです。これにより、すべてのリクエストがデータベース クエリを通過するようになります。

危険性: 瞬時に大量のリクエストが殺到するため、各リクエストをデータベース內(nèi)でクエリする必要があります。データベースへのトラフィックの瞬間的な流入は、データベースへの負(fù)擔(dān)を大幅に増大させ、直接的なデータベース麻痺を容易に引き起こす可能性があります。

解決策:

1. キャッシュ時間はランダムです。特定の時刻に多數(shù)のキャッシュが期限切れになるため、キャッシュの期限切れ時間が比較的集中していることを意味します。有効期限を焦點を當(dāng)てずにランダムに直接設(shè)定します。この方法では、キャッシュの有効期限があまり集中せず、データベースに対するクエリ操作のリクエストが同時に大量に発生することもありません。

2. マルチレベルキャッシュ。単に Redis に依存してキャッシュするのではなく、memcached をキャッシュに使用することもできます (これは単なる例であり、他のキャッシュ サービスも使用できます)。データをキャッシュする場合は、Redis 用のキャッシュと memcached 用のキャッシュを作成します。 Redis が失敗した場合は、memcached を使用できます。

3. ミューテックス ロック。キャッシュの內(nèi)訳でミューテックス ロックの使用について説明しましたが、アバランシェの場合にもミューテックス ロックを使用できます。

4. 有効期限フラグを設(shè)定します。実際、キャッシュの內(nèi)訳で説明した永久的な無期限を使用することもできます。リクエスト時に有効期限が決定され、有効期限が近づくと有効期限フラグが設(shè)定され、獨立したスレッドがトリガーされてキャッシュが更新されます。

スキーム分析:

  • 最初のスキームでは亂數(shù)のキャッシュ時間を使用し、キーの有効期限を確実に分散させます。難しいのはキャッシュ時間をどのように設(shè)定するかですが、キャッシュ時間が短く、データ量が非常に多い一部のデータの場合、このソリューションでは適切な時間制御が必要です。

  • 2 番目のソリューションでは、マルチレベル キャッシュを使用して、すべてのリクエストがキャッシュされるようにします。ただし、これにより、システムのアーキテクチャの難しさが増し、マルチレベルの更新のキャッシュなど、その他のさまざまな問題が発生します。

  • 3 番目のオプションはミューテックス ロックを使用します。ミューテックス ロックについてはキャッシュ ブレークダウンで説明しました。雪崩シナリオで使用できますが、これにより大量の配布が生成されます。スタイル ロック。

  • 4 番目のソリューションでは、論理キャッシュ時間を使用します。これにより、システムのキャッシュ圧力が十分に保証されます。

計畫の概要:

実際のプロジェクトでは、1 番目、2 番目、4 番目のオプションを使用して試してみることをお勧めします。どちらが良いでしょう。

#概要

  • キャッシュの侵入は、データベース自體にデータがないことが原因です。

  • キャッシュの故障とキャッシュなだれは、データはデータベースに存在するが、キャッシュ內(nèi)のデータが無効であるため、データベースが再度クエリされてからキャッシュに追加されることを意味します。

  • キャッシュの故障は一部のホット キーを?qū)澫螭趣筏皮い蓼工?、キャッシュなだれは大?guī)模なキャッシュ障害です。キャッシュ キーの分割が異なることを除いて、2 つの原則は実際には同じです。

プログラミング関連の知識について詳しくは、

プログラミング入門をご覧ください。 !

以上がRedis のホット キー ストレージの問題を分析し、例外をキャッシュするための解決策について説明します。の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelの最高の拡張パックを推奨:2024 Essential Tools Laravelの最高の拡張パックを推奨:2024 Essential Tools Apr 30, 2025 pm 02:18 PM

2024年の必須のLaravel拡張パッケージには、次のものが含まれます。 2。LaravelteLescope、詳細(xì)なアプリケーション監(jiān)視を提供します。 3。RARAVELHORIZON、Redisキュータスクの管理。これらの拡張パックは、開発効率とアプリケーションのパフォーマンスを向上させることができます。

Laravel Environmentの構(gòu)築と基本構(gòu)成(Windows/Mac/Linux) Laravel Environmentの構(gòu)築と基本構(gòu)成(Windows/Mac/Linux) Apr 30, 2025 pm 02:27 PM

さまざまなオペレーティングシステムでLaravel環(huán)境を構(gòu)築する手順は次のとおりです。1。Windows:XAMPPを使用してPHPと作曲家をインストールし、環(huán)境変數(shù)を構(gòu)成し、Laravelをインストールします。 2.MAC:HomeBrewを使用してPHPとComposerをインストールし、Laravelをインストールします。 3.Linux:Ubuntuを使用してシステムを更新し、PHPとComposerをインストールし、Laravelをインストールします。各システムの特定のコマンドとパスは異なりますが、コアステップは、Laravel開発環(huán)境のスムーズな構(gòu)築を確保するために一貫しています。

Redis:従來のデータベースサーバーとの比較 Redis:従來のデータベースサーバーとの比較 May 07, 2025 am 12:09 AM

Redisは、並行性が高く、遅延の低いシナリオの従來のデータベースよりも優(yōu)れていますが、複雑なクエリやトランザクション処理には適していません。 1.Redisは、メモリストレージ、高速読み取り速度、および高い並行性と低遅延の要件に適しています。 2.従來のデータベースは、ディスクに基づいており、複雑なクエリとトランザクション処理をサポートし、データの一貫性と永続性が強い。 3. Redisは、従來のデータベースのサプリメントまたは代替品として適していますが、特定のビジネスニーズに応じて選択する必要があります。

Linuxのユーザーリソースを制限する方法は? ulimitを構(gòu)成する方法は? Linuxのユーザーリソースを制限する方法は? ulimitを構(gòu)成する方法は? May 29, 2025 pm 11:09 PM

Linuxシステムは、リソースの過度の使用を防ぐために、ULIMITコマンドを介してユーザーリソースを制限します。 1.ulimitは、ファイル記述子(-n)、メモリサイズ(-v)、スレッドカウント(-u)などの數(shù)を制限できるビルトインシェルコマンドであり、ソフト制限(現(xiàn)在の有効値)とハードリミット(最大上限)に分割されます。 2。Ulimit-N2048などの一時的な変更には、Ulimitコマンドを直接使用しますが、現(xiàn)在のセッションでのみ有効です。 3.永続的な効果を得るには、/etc/security/limits.confを変更し、PAM構(gòu)成ファイルを変更し、SessionRequiredPam_limits.soを追加する必要があります。 4. SystemDサービスは、ユニットファイルにLIMを設(shè)定する必要があります

Redisは主にデータベースですか? Redisは主にデータベースですか? May 05, 2025 am 12:07 AM

Redisは主にデータベースですが、単なるデータベース以上のものです。 1.データベースとして、Redisは持続性をサポートし、高性能のニーズに適しています。 2。キャッシュとして、Redisはアプリケーションの応答速度を改善します。 3。メッセージブローカーとして、Redisはリアルタイム通信に適したPublish-Subscribeモードをサポートしています。

Redis:SQLを超えて-NOSQLの視點 Redis:SQLを超えて-NOSQLの視點 May 08, 2025 am 12:25 AM

Redisは、高性能と柔軟性のためにSQLデータベースを超えています。 1)Redisは、メモリストレージを介して非常に速い読み取りおよび書き込み速度を?qū)g現(xiàn)します。 2)複雑なデータ処理に適したリストやコレクションなど、さまざまなデータ構(gòu)造をサポートしています。 3)シングルスレッドモデルは開発を簡素化しますが、高い並行性はボトルネックになる可能性があります。

Redis:その目的と主要なアプリケーションを発表します Redis:その目的と主要なアプリケーションを発表します May 03, 2025 am 12:11 AM

Redisisanopen-Source、In-MemoryDatastructurestoreStoreSadatabase、Cache、AndmessageBroker、ExcellingInspeedandversatility.ItisisWidely-susederCaching、Real-Timeanalytics、Session Management、AndleaderboardsdueTotutsuptorututrututrututruturturturturturturesturesaddataacys

PHPStudyを使用して動的なPHP Webサイトを構(gòu)築するための手順と例 PHPStudyを使用して動的なPHP Webサイトを構(gòu)築するための手順と例 May 16, 2025 pm 07:54 PM

PHPStudyを使用して動的なPHP Webサイトを構(gòu)築する手順には次のものがあります。1。PHPSTUDYをインストールし、サービスを開始します。 2。ウェブサイトのルートディレクトリとデータベース接続を構(gòu)成します。 3.動的コンテンツを生成するPHPスクリプトを書き込みます。 4.ウェブサイトのパフォーマンスをデバッグして最適化します。これらの手順を通じて、完全に機能的な動的PHP Webサイトをゼロから構(gòu)築できます。

See all articles