検索
ホームページデータベースRedisRedis キャッシュの侵入、キャッシュの破壊、キャッシュなだれの原理と解決策を一緒に学びましょう

Redis キャッシュの侵入、キャッシュの破壊、キャッシュなだれの原理と解決策を一緒に学びましょう

推奨 (無料): redis

  • キャッシュの侵入:キー内の対応するキャッシュ データが存在しないため、データベースが要求され、データベースへの負荷が 2 倍になります。

  • キャッシュの内訳: One Redis の有効期限が切れると、すぐに多数のユーザーが同じキャッシュ データをリクエストし、これらのリクエストがデータベースをリクエストすることになり、データベースへの負荷が 2 倍になります。 ## キャッシュ雪崩:

    キャッシュ サーバーがダウンしているか、一定期間に大量のキャッシュが集中しているため、すべてのリクエストがデータベースに送信され、データベースの負荷が 2 倍になります。これは複数のキーに対するものです
  • 1. キャッシュ侵入の解決策

一般的に使用される方法では、ブルーム フィルター メソッドを使用してデータを傍受できます。別の解決策があります。つまり、リクエストのデータが空で、空の値もキャッシュされるため、侵入は発生しません。

    <?php class getPrizeList {
        /**
         * redis实例
         * @var \Redis
         */
        private $redis;
    
        /**
         * @var string
         */
        private $redis_key = &#39;|prize_list&#39;;
    
        /**
         * 过期时间
         * @var int
         */
        private $expire = 30;
    
        /**
         * getPrizeList constructor.
         * @param $redis
         */
        public function __construct($redis)
        {
            $this->redis = $redis;
        }
    
        /**
         * @return array|bool|string
         */
        public function fetch()
        {
            $result = $this->redis->get($this->redis_key);
            if(!isset($result)) {
                //此处应该进行数据库查询...
                //如果查询结果不存在,给其默认空数组进行缓存
                $result = [];
                $this->redis->set($this->redis_key, $result, $this->expire);
            }
    
            return $result;
        }
    }
  • 2.キャッシュブレイクダウンソリューション
  • ミューテックスキーを使用すると、キーの有効期限が切れると、複数のリクエストが来て、そのうちの 1 つがデータベースを操作できるようになり、他のリクエストは最初のリクエストを待つことになります。再度リクエストする前に、結果が正常に返されるようにリクエストしてください。

      <?php class getPrizeList {
          /**
           * redis实例
           * @var \Redis
           */
          private $redis;
      
          /**
           * @var string
           */
          private $redis_key = &#39;|prize_list&#39;;
      
          /**
           * @var string
           */
          private $setnx_key = &#39;|prize_list_setnx&#39;;
      
          /**
           * 过期时间
           * @var int
           */
          private $expire = 30;
      
          /**
           * getPrizeList constructor.
           * @param $redis
           */
          public function __construct($redis)
          {
              $this->redis = $redis;
          }
      
          /**
           * @return array|bool|string
           */
          public function fetch()
          {
              $result = $this->redis->get($this->redis_key);
              if(!isset($result)) {
                  if($this->redis->setnx($this->setnx_key, 1, $this->expire)) {
                      //此处应该进行数据库查询...
                      //$result = 数据库查询结果;
                      $this->redis->set($this->redis_key, $result, $this->expire);
                      $this->redis->del($this->setnx_key); //删除互斥锁
                  } else {
                      //其他请求每等待10毫秒重新请求一次
                      sleep(10);
                      self::fetch();
                  }
              }
      
              return $result;
          }
      }
    • 3. キャッシュ雪崩の解決策
    • この状況は、複数のキーが同時に期限切れになることが原因で発生します。データベースのプレッシャー。1 つの方法として、キーの有効期限に基づいて時間乱数を追加して、有効期限を分散し、キャッシュ時間の有効期限の繰り返し率を減らすことができます。 ##もう 1 つの方法は、ロックすることです。キューイングは、上記のキャッシュ ブレークダウンの解決策に少し似ていますが、リクエストの量が多すぎます。たとえば、5,000 件のリクエストが受信され、4,999 件のリクエストが待機する必要があります。これは、次のことを示す指標である必要があります。根本的な原因は解決されません。ユーザー エクスペリエンスが劣悪であるだけでなく、分散環境でも問題が発生します。より複雑なため、同時実行性の高いシナリオではほとんど使用されません。

      • 最良の方法解決策は、キャッシュ タグを使用して、タグの有効期限が切れているかどうかを判断することです。有効期限が切れた場合は、データベースにリクエストしてキャッシュします。データの有効期限は、キャッシュ マークよりも長く設定する必要があります。データベース、他のリクエストは最後にキャッシュされたデータを取得します
      <?php class getPrizeList {
          /**
           * redis实例
           * @var \Redis
           */
          private $redis;
      
          /**
           * @var string
           */
          private $redis_key = &#39;|prize_list&#39;;
      
          /**
           * 缓存标记key
           * @var string
           */
          private $cash_key = &#39;|prize_list_cash&#39;;
      
          /**
           * 过期时间
           * @var int
           */
          private $expire = 30;
      
          /**
           * getPrizeList constructor.
           * @param $redis
           */
          public function __construct($redis)
          {
              $this->redis = $redis;
          }
      
          /**
           * @return array|bool|string
           */
          public function fetch()
          {
              $cash_result = $this->redis->get($this->cash_key);
              $result = $this->redis->get($this->redis_key);
              if(!$cash_result) {
                  $this->redis->set($this->cash_key, 1, $this->expire);
                  //此处应该进行数据库查询...
                  //$result = 数据库查询结果, 并且设置的时间要比cash_key长,这里设置为2倍;
                  $this->redis->set($this->redis_key, $result, $this->expire * 2);
              }
      
              return $result;
          }
      }

      以上がRedis キャッシュの侵入、キャッシュの破壊、キャッシュなだれの原理と解決策を一緒に学びましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

      声明
      この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
      Redis:NOSQLアプローチの利点Redis:NOSQLアプローチの利点Apr 27, 2025 am 12:09 AM

      Redisは、高性能と柔軟性を提供するNOSQLデータベースです。 1)大規模データと高い並行性の処理に適したキー価値ペアを介してデータを保存します。 2)メモリストレージとシングルスレッドモデルは、速い読み取りと書き込みと原子性を確保します。 3)RDBおよびAOFメカニズムを使用してデータを持続し、高可用性とスケールアウトをサポートします。

      Redis:そのアーキテクチャと目的を理解するRedis:そのアーキテクチャと目的を理解するApr 26, 2025 am 12:11 AM

      Redisは、主にデータベース、キャッシュ、メッセージブローカーとして使用されるメモリデータ構造ストレージシステムです。そのコア機能には、シングルスレッドモデル、I/O多重化、持続メカニズム、複製、クラスタリング機能が含まれます。 Redisは、キャッシュ、セッションストレージ、メッセージキューのための実際のアプリケーションで一般的に使用されます。適切なデータ構造を選択し、パイプラインとトランザクションを使用し、監視とチューニングを使用することにより、パフォーマンスを大幅に改善できます。

      Redis vs. SQLデータベース:重要な違​​いRedis vs. SQLデータベース:重要な違​​いApr 25, 2025 am 12:02 AM

      RedisデータベースとSQLデータベースの主な違いは、Redisが高性能および柔軟性要件に適したインメモリデータベースであることです。 SQLデータベースは、複雑なクエリとデータの一貫性要件に適したリレーショナルデータベースです。具体的には、1)Redisは高速データアクセスとキャッシュサービスを提供し、キャッシュおよびリアルタイムのデータ処理に適した複数のデータ型をサポートします。 2)SQLデータベースは、テーブル構造を介してデータを管理し、複雑なクエリとトランザクション処理をサポートし、データの一貫性を必要とするeコマースや金融システムなどのシナリオに適しています。

      Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

      redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

      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の汎用性と高性能により、これらのシナリオで輝きます。

      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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

      ホットツール

      PhpStorm Mac バージョン

      PhpStorm Mac バージョン

      最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

      mPDF

      mPDF

      mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

      MinGW - Minimalist GNU for Windows

      MinGW - Minimalist GNU for Windows

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

      MantisBT

      MantisBT

      Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

      EditPlus 中国語クラック版

      EditPlus 中国語クラック版

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