Redis6 アプリケーションの問題 - キャッシュの侵入、キャッシュの破壊、キャッシュなだれの問題と解決策

キャッシュの侵入

データベースに存在しないデータに対する複数のリクエスト
ここに画像の説明を挿入
ここに画像の説明を挿入
解決策:
(1) 空の値をキャッシュする: クエリによって返されたデータが空の場合 (データが存在するかどうかに関係なく)、空の結果 (null) をキャッシュし、有効期限を設定します。空の結果の時間は非常に短く、5 分以内です。
(2) アクセス可能なリスト (ホワイト リスト) を設定します。ビットマップ タイプを使用してアクセス可能なリストを定義します。リスト ID はビットマップのオフセットとして使用されます。 、各訪問とビットマップ内の ID 比較のために、アクセス ID がビットマップにない場合は傍受され、アクセスは許可されません。
(3) ブルームフィルターを使用します
(4) リアルタイム監視: ブラックリストを設定してサービスを制限します

キャッシュの内訳

キャッシュに存在しない特定のホット データに対する同時リクエストが多数発生すると、そのリクエストがデータベースにヒットし、データベースがクラッシュします。解決策: ( 1) 事前に設定されたホット データ: Redis のアクセスがピークになる前に、いくつかのホット データを保存しここに画像の説明を挿入
ます
。内部では、これらの人気のあるデータキーの期間を長くします
(2) リアルタイム調整: どの人気のあるデータをオンサイトで監視し、キーの有効期限をリアルタイムで調整します
(3) ロックを使用します:
1.キャッシュが失敗した場合(取り出した値が空であると判断した場合)、すぐにデータベースをロードしないでください。
2. まず、成功した操作の戻り値を持つキャッシュツールのいくつかの操作を使用します(RedisのSETNXなど)

キャッシュ雪崩

キャッシュに存在しないバッチ キーに対する大量の同時リクエストが発生すると、そのリクエストがデータベースにヒットし、その結果、データベースに瞬時の負荷がかかり、クラッシュが発生します。キャッシュなだれとキャッシュ ペネトレーションの違いは、多くの場合、前者が重要であるということです
。後者はここに画像の説明を挿入
特定のキーに対するソリューションです:
(1) マルチレベルのキャッシュ アーキテクチャを構築します: nginx キャッシュ + redis キャッシュ + その他のキャッシュ (ehcache など)
(2) ロックまたはキューを使用します: ロックまたはキューを使用します。キューは、一度にデータベースを読み取る多数のスレッドが発生しないようにするためのものです。また、基盤となるストレージ システムに障害が発生した場合に、多数の同時リクエストがそのシステムに降りかかるのを避けるためのものであり、高い同時実行には適していません。

概要:
キャッシュの侵入: キャッシュとデータベースが存在しないため、データベースに存在しないデータに対する大量の同時リクエストが発生し、その結果データベースが常にクエリされ、データベースがクラッシュします。
キャッシュの内訳: Redis ホットスポット キーの有効期限が切れており、大量のアクセスがこのデータを使用するため、過剰なデータベース アクセスが発生します。
キャッシュなだれ: 非常に短期間に多数のキーの有効期限を一元的に照会します。

おすすめ

転載: blog.csdn.net/weixin_45334970/article/details/122882120