ホームページ  >  記事  >  バックエンド開発  >  Redis におけるキャッシュの侵入とキャッシュの無効化の防止と解決策についての簡単な説明

Redis におけるキャッシュの侵入とキャッシュの無効化の防止と解決策についての簡単な説明

little bottle
little bottle転載
2019-04-28 18:03:472782ブラウズ

この記事は、Redis キャッシュの侵入とキャッシュ障害の防止と解決策について説明したものです。一定の参考価値があります。興味のある友人はそれについて学ぶことができます。お役に立てれば幸いです。

キャッシュ ペネトレーション:

理解

キャッシュ ペネトレーションとは、キャッシュがあるために存在してはならないデータをクエリすることを指します。はミスです。データベースからクエリを実行する必要があります。データが見つからない場合、データはキャッシュに書き込まれません。これにより、存在しないデータが要求されるたびにデータベース内でクエリが実行され、キャッシュの浸透。

解決策:

考えられるすべてのクエリ パラメータをハッシュ形式で保存し、最初に制御層で検証し、一致しない場合は破棄します。最も一般的な方法は、ブルーム フィルターを使用して、考えられるすべてのデータを十分な大きさのビットマップにハッシュすることです。存在してはいけないデータはこのビットマップによってインターセプトされるため、基盤となるストレージ システムへの損傷が回避されます。クエリ プレッシャー。

より単純で大まかな方法​​を使用することもできます。クエリによって返されたデータが空の場合 (データが存在しないか、システムに障害が発生したかに関係なく)、空の結果は引き続きキャッシュされますが、有効期限は短く、長くても 5 分以内です。

キャッシュ雪崩

理解

一定期間内にキャッシュが集中的に失敗し、キャッシュの侵入が多数発生した場合発生すると、すべてのクエリがデータベースに到達し、キャッシュ雪崩が発生します。

これに対する完璧な解決策はありませんが、ユーザーの行動を分析し、障害発生時点を均等に分散することはできます。ほとんどのシステム設計者は、ロックまたはキューの使用を検討して、単一スレッド (プロセス) によるキャッシュへの書き込みを保証し、障害発生時に基盤となるストレージ システムに多数の同時リクエストが発生するのを防ぎます。

解決策

キャッシュの有効期限が切れたら、ロックまたはキューイングを使用して、データベースを読み取り、キャッシュに書き込むスレッドの数を制御します。たとえば、データのクエリと特定のキーのキャッシュの書き込みを許可されるのは 1 つのスレッドだけであり、他のスレッドは待機します。

キャッシュ リロード メカニズムを使用してキャッシュを事前に更新し、大規模な同時アクセスが発生する前にキャッシュのロードを手動でトリガーできます。

異なるキー、異なる有効期限を設定、二次キャッシュを均等に

実行するか、二重キャッシュ戦略を実行してみてください。 A1 はオリジナル キャッシュ、A2 はコピー キャッシュです。A1 の有効期限が切れると、A2 にアクセスできます。A1 のキャッシュ有効期限は短期に設定され、A2 は長期に設定されます。

関連チュートリアル: redis ビデオ チュートリアル

以上がRedis におけるキャッシュの侵入とキャッシュの無効化の防止と解決策についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。