キャッシュ ペネトレーション
キャッシュ ペネトレーションとは、明らかに存在しないデータをクエリすることを指します。キャッシュがヒットしないため、後続のクエリはデータベースはできません クエリの結果はキャッシュに書き込まれず、各クエリがデータベースを要求することになり、キャッシュの侵入が発生します; (推奨学習: Redis ビデオ チュートリアル )
##ソリューション##ブルーム フィルタリング
## 考えられるすべてのクエリ パラメータをハッシュ形式で保存し、最初に検証が実行されます。制御層に一致し、一致しない場合は破棄されるため、基盤となるストレージ システムに対するクエリのプレッシャーが回避されます。
空のオブジェクトをキャッシュするWhen保存 レイヤーがミスした後は、返された空のオブジェクトもキャッシュされ、有効期限が設定されます。後でデータにアクセスすると、キャッシュからデータが取得され、バックエンド データ ソースが保護されます。
#しかし、この方法には 2 つの問題があります:
null 値に有効期限を設定した場合でも、一定期間はキャッシュ層とストレージ層のデータ間に不整合が残り、これは必要なビジネスにとって問題となります。一貫性を維持するため。
キャッシュなだれ
キャッシュなだれとは、キャッシュ層が大量のリクエストを運ぶため、ストレージ層を効果的に保護しますが、キャッシュ層全体がサービスを提供するために、すべてのリクエストがストレージ層に到達し、ストレージ層への呼び出し数が大幅に増加し、ストレージ層もハングアップします。
#ソリューション
キャッシュ レイヤー サービスの高可用性を確保するたとえ個人であってもノード、個々のマシン、またはコンピューター室がダウンしても、サービスは引き続き提供でき、たとえば、Redis Sentinel と Redis Cluster は高可用性を実現します。
分離コンポーネントを利用してバックエンド フローを制限およびダウングレードする
キャッシュが無効化された後、データベースの読み取りとキャッシュへの書き込みを行うスレッドの数が制御されます。ロックまたはキューイングによって。たとえば、データのクエリと特定のキーのキャッシュの書き込みを許可されるのは 1 つのスレッドだけであり、他のスレッドは待機します。
データの予熱
キャッシュ リロード メカニズムを使用して事前にキャッシュを更新し、大規模な同時アクセスの前にキャッシュ内のさまざまなキーのロードを手動でトリガーできます。キャッシュの無効化時間ができるだけ均等になるように、異なる Expiration 時間を設定します。
Redis 関連の技術記事の詳細については、Redis 入門チュートリアル 列にアクセスして学習してください。
以上がRedis の雪崩と侵入を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。