実際のビジネス シナリオでは、Redis は通常、リレーショナル データベースなどのバックエンド データベースへの負担を軽減するために他のデータベースと組み合わせて使用されます。 . データベース MySQL とともに使用されます。
Redis は、ホットスポット データなど、頻繁にクエリされるデータを MySQL にキャッシュするため、ユーザーがアクセスするときに MySQL に移動する必要がなくなります。クエリを実行すると、Redis にキャッシュされたデータが直接取得されるため、バックエンド データベースに対する読み取りの負荷が軽減されます。
ユーザーがクエリしたデータが Redis で利用できない場合、ユーザーのクエリ リクエストは MySQL データベースに転送されます。MySQL がデータをクライアントに返すと、データは Redis にキャッシュされます。 これにより、ユーザーが再度読み取るときに、Redis からデータを直接取得できるようになります。フローチャートは次のとおりです。
#Redis をキャッシュ データベースとして使用すると、必然的に 3 つの一般的なキャッシュの問題に直面することになります
#キャッシュ ペネトレーション
2.1 はじめにキャッシュ ペネトレーション
キャッシュ雪崩
2. キャッシュ侵入
#2.2 解決策
空のオブジェクトをキャッシュする
Redis キャッシュ スペースを占有します。
ブルーム フィルターブルーム フィルター方法を使用する方が効率的かつ実用的です。 プロセス図は次のとおりです:
キャッシュの予熱は、システムが実行される前に、関連するデータを Redis キャッシュ システムに事前にロードするプロセスです。始まります。これにより、ユーザーが要求したときにデータをロードすることがなくなります。
#2.3 ソリューションの比較どちらのソリューションもキャッシュ侵入の問題を解決できますが、使用シナリオは異なります。
空のオブジェクトをキャッシュする: 空のデータのキーの数が限られており、キー要求が繰り返される可能性が高いシナリオに適しています。
ブルーム フィルター: 空のデータのキーが異なり、キー要求が繰り返される可能性が低いシナリオに適しています。
3. キャッシュの内訳
3.1 はじめに
3.2 解決策有効期限を変更する
分散ロック方式を採用してキャッシュの使用を再設計します。プロセスは次のとおりです:
3.3 ソリューションの比較
ロック: キーを介してデータをクエリするときは、最初にキャッシュをクエリします。そうでない場合は、分散ロックを介してロックします。ロックを取得する最初のプロセス Enter the back -データベースクエリを終了し、クエリ結果を Redis にバッファリングします。
ロック解除: 他のプロセスは、ロックが特定のプロセスによって占有されていることを認識すると、待機状態に入ります。ロック解除後、他のプロセスはキャッシュされたキーにアクセスします。振り向く。 。
無期限: このソリューションは、実際の有効期限を設定しません。実際には、ホット キーによって一連の危険が引き起こされることはありませんが、データの不整合が発生し、コードの複雑さが増加します。
ミューテックス ロック: この解決策は比較的シンプルですが、特定の隠れた危険性があります。キャッシュの構築プロセスに問題がある場合、またはキャッシュの構築に時間がかかる場合、デッドロックが発生する可能性があり、スレッド プールのブロック: リスクはありますが、この方法を使用すると、バックエンド ストレージの負荷を軽減し、より良い一貫性を実現できます。
4. キャッシュなだれ4.1 はじめにキャッシュなだれとは、キャッシュ内の多数のキーが同時に期限切れになることを意味します。このとき、データのアクセス数が非常に多いため、バックエンド データベースへの負荷が急激に高まり、クラッシュする可能性もあります。この現象はキャッシュなだれと呼ばれます。キャッシュブレークダウンとは異なります。キャッシュブレークダウンは同時実行量が特に多いときに特定のホットキーが突然期限切れになるときに発生しますが、キャッシュアバランシェは多数のキーが同時に期限切れになるときに発生するため、同じ順序ではありません。まったく規模が大きい。
#4.2 解決策
有効期限の処理同時に期限切れになる多数のキーによって引き起こされるキャッシュの故障と雪崩の問題を軽減するために、キャッシュ雪崩と同様に、ホットスポット データを期限切れにしない戦略を採用できます。さらに、キーが同時に期限切れになるのを防ぐために、キーにランダムな有効期限を設定できます。redis の高可用性
雪崩により 1 つの Redis がハングする可能性があるため、さらにいくつかの Redis を追加できます、クラスターを構築すると、1 つがハングアップしても、他のものは動作を継続できます。
以上がRedis キャッシュ問題の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。