キャッシュの侵入は、クライアント/ブラウザ側に存在しないキーを要求することです。このキーは Redis に存在しません。データベース内のデータ ソース。このキーのリクエストをキャッシュから取得できないたびに、データ ソースがリクエストされます。
存在しないユーザー ID を使用してユーザー情報にアクセスすると、その情報は Redis にもデータベースにもありません。複数のリクエストによりデータ ソースが過負荷になる可能性があります。
キャッシュ内に存在してはならず、クエリできないデータです。キャッシュはミスがあると受動的に書き込まれるため、キャッシュは存在しません。フォールト トレランスを考慮すると、キャッシュに存在するデータは存在しません。 redis でキャッシュすると、存在しないデータが要求されるたびにデータベースが要求されるため、キャッシュの意味が失われます。
(1) クエリによって返されたデータが空の場合 (データが存在するかどうかに関係なく)、空の結果 (null) をキャッシュし、空の結果の有効期限を次のように設定します。非常に短く、最長で 5 分以内
(2) アクセシブル リスト (ホワイトリスト) を設定します。ビットマップ タイプを使用してアクセシブル リストを定義します。リスト ID はビットマップのオフセットとして使用されます。各アクセスとビットマップ内の ID を比較し、アクセス ID がビットマップにない場合は、インターセプトしてアクセスを禁止します。
(3) ブルームフィルターを利用する
(4) リアルタイムデータ監視を実施し、Redisのヒット率が急激に低下した場合にアクセスオブジェクトとアクセスデータを確認し、設定を行うブラックリスト。
ユーザーが既存のキーのデータをリクエストすると、redis 内のキーのデータが古くなります。の同時リクエストでキャッシュの有効期限が切れていることが判明すると、データ ソースはデータのロードを要求され、redis にキャッシュされます。このとき、多数の同時リクエストによりデータベース サービスが圧倒される可能性があります。
特定のキーのデータが大量に要求される場合、このキーはホット データであるため、「故障」問題を回避するために考慮する必要があります。
(1) 事前に設定された人気のあるデータ: redis のアクセスがピークになる前に、事前にいくつかの人気のあるデータを redis に保存し、これらの人気のあるデータキーの期間を長くします
(2) リアルタイム調整 : どのデータが人気があるかをオンサイトで監視し、キーの有効期限の長さをリアルタイムに調整します
(3) ロックの使用:
はキャッシュの有効期限が切れたときです (データベースをすぐにロードするのではなく、取り出した値が空であると判断されます。
まず、成功した操作の戻り値を持つキャッシュ ツールのいくつかの操作 (Redis の SETNX など) を使用して、ミューテックス キーを設定します。
いつ操作が正常に返された場合は、load db 操作を再度実行し、キャッシュを復元し、最後にミューテックス キーを削除します。
操作が失敗を返した場合は、スレッドのロードがあることが証明されます。 db を実行すると、現在のスレッドはしばらくスリープ状態になります。get Cache メソッド全体を再試行する時間です。
対応するデータは存在しますが、キー データが存在しません。期限切れ (Redis キャッシュの有効期限が切れ、このキーは自動的に削除されます)。この時点では、多数の同時リクエストが異なるキーにアクセスします。つまり、多数の異なるキーが同時にアクセスされます。キーが有効期限に達し、データベースが要求される 大量の同時リクエスト データベース サーバーに負荷がかかる この状況をキャッシュ雪崩と呼びます キャッシュの故障との違いは、前者がキーであることです。
キャッシュに障害が発生した場合の雪崩現象は、基盤となるシステムに重大な影響を与えます。
(1) マルチレベル キャッシュ アーキテクチャの構築:
nginx キャッシュ redis キャッシュ 他のキャッシュ (ehcache など)
(2) ロックまたはキューを使用する:
(3) キャッシュを更新するために有効期限フラグを設定します。
(4) キャッシュの有効期限を分散します:
以上がRedis に基づくデータのキャッシュに関する一般的な問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。