検索
ホームページデータベースRedisRedis キャッシュ雪崩問題を解決する方法

キャッシュ層は大量のリクエストを伝送し、ストレージ層を効果的に保護します。ただし、大量のキャッシュ障害によりストレージ層に大量のリクエストが到着したり、キャッシュ全体がサービスを提供できなくなったりすると、ストレージ層の負荷が増加します(大量のリクエストがデータベースにクエリを実行する)。これはキャッシュなだれのシナリオです。

キャッシュなだれを解決するには、次の点から始めることができます:

1. キャッシュ レイヤーの可用性を高く保つ

Redis を使用するセントリー モードまたは Redis クラスター デプロイメント方法では、個々の Redis ノードがオフラインになっても、キャッシュ レイヤー全体は引き続き使用できます。さらに、Redis は複数のコンピューター ルームにデプロイできるため、コンピューター ルームがクラッシュした場合でも、キャッシュ レイヤーの可用性を高めることができます。

2. 電流制限ダウングレード コンポーネント

キャッシュ層とストレージ層はどちらもエラーの可能性があり、リソースとみなすことができます。大量の同時実行性を持つ分散システムとして、リソースが使用できない場合、すべてのスレッドがこのリソースを取得するときに例外が発生し、システム全体が使用できなくなる可能性があります。同時実行性の高いシステムでは、ダウングレードは非常に一般的です。たとえば、レコメンデーション サービスでは、パーソナライズされたレコメンデーション サービスが利用できない場合、ダウングレードしてホットスポット データを補完し、レコメンデーション サービス全体が利用できなくなることを防ぐことができます。一般的な電流制限劣化コンポーネントには、Hystrix、Sentinel などが含まれます。

3. キャッシュは期限切れになりません

Redis に保存されたキーは期限切れにならないため、多数のキャッシュが同時に失敗するという問題は発生しませんが、その場合、Redis にはより多くのストレージ。

4. キャッシュの有効期限を最適化する

キャッシュを設計するときは、多数のキーが同時に無効になり、キャッシュなだれが発生するのを避けるために、各キーに適切な有効期限を選択します。

5. ミューテックス ロックを使用してキャッシュを再構築する

高同時実行シナリオでは、データのクエリとキャッシュの再構築を同時に行うためにストレージ レイヤーに大量のリクエストが到達するのを避けるために、 「キーはデータをクエリするためにキャッシュ レイヤーに移動します。キャッシュ レイヤーがヒットすると、キーはロックされ、データはストレージ レイヤーからクエリされ、データはストレージ レイヤーに書き込まれます。」のように、ミューテックス ロック制御を使用できます。キャッシュ層にアクセスし、最終的にロックが解放されます。他のスレッドがロックの取得に失敗したことを検出した場合は、スレッドを一定期間スリープさせて再試行します。ロックの種類については、スタンドアロン環境の場合はJavaコンカレントパッケージのLockを、分散環境の場合は分散ロック(RedisのSETNXメソッド)を使用できます。

分散環境におけるミューテックスロック再構築キャッシュ擬似コード

/**
 * 互斥锁建立缓存
 *
 **/
public String get(String key) {
   // redis中查询key对应的value
   String value = redis.get(key);
   // 缓存未命中
   if (value == null) {
      // 互斥锁
      String key_mutex_lock = "mutex:lock" + key; 
      // 互斥锁加锁成功
      if(redis.setnx(key_mutex_lock,"1")) { // 返回 0(false),1(true)
          try {
              // 设置互斥锁超时时间,这里设置的是锁的失效时间,而不是key的失效时间
              redis.expire(key_mutex_lock,3*60);
              // 从数据库查询
              value = db.get(key);
              // 数据写入缓存
              redis.set(key,value);
            
          } finally {
               // 释放锁
              boolean keyExist = jedis.exists(key_mutex_lock);
              if(keyExist){
                  redis.delete(key_mutex_lock);
               }
      } else { 
              // 加锁失败,线程休息50ms后重试
               Thread.sleep(50);
               return get(key); // 直接返回缓存结果  
     }
   }
}

Redis 分散ロックは、分散環境におけるキャッシュ再構築の実装に使用され、設計思想がシンプルでデータの整合性が保証されるという利点があります。 ; デメリットは、コードの複雑さが増し、ユーザーが待たされる可能性があることです。高い同時実行性では、キャッシュの再構築中にキーがロックされると仮定します。現在 1,000 個の同時リクエストがある場合、そのうち 999 個がブロックされ、999 個のユーザー リクエストがブロックされて待機することになります。

6. キャッシュの非同期再構築

このスキームでは、キャッシュの構築に非同期戦略が採用されており、スレッド プールからスレッドを取得して非同期にキャッシュを構築します。リクエストはストレージに直接到達しません。レイヤー、このソリューションの各 Redis キーは論理タイムアウトを維持します。論理タイムアウトが現在時刻より小さい場合、現在のキャッシュの有効期限が切れているため、キャッシュを更新する必要があることを意味します。それ以外の場合は、キャッシュを更新する必要があります。現在のキャッシュの有効期限が切れておらず、キャッシュ内の値が直接返されることを意味します。たとえば、Redis では、キーの有効期限は 60 分に設定され、対応する値の論理有効期限は 30 分に設定されます。このようにして、キーが論理有効期限の 30 分に達すると、このキーのキャッシュを非同期で更新できますが、キャッシュの更新期間中は古いキャッシュが引き続き使用できます。この非同期キャッシュ再構築方法により、多数のキーが同時に無効になることを効果的に防ぐことができます。

rree

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

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Apr 17, 2025 am 12:16 AM

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

Redis:データモデルと構造の調査Redis:データモデルと構造の調査Apr 16, 2025 am 12:09 AM

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

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

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