私たちの日常の開発では、多くの場合、使用する必要がある大量のデータに関連した並行性の高い要件を、関与するキャッシュとしてのRedisが、キャッシュが雪崩を発生することがあり、キャッシュ、キャッシュの故障やその他の問題を貫通、ここで簡単な例私は質問の下に話すとその理由ソリューション。
キャッシュ雪崩
私は新しいウェブサイトを開設している場合、一部の人々が訪問に来る最初の日は、私もとても幸せですが、私は今日はほぼ同時にキャッシュ失敗の確立を訪問し、ケースを無視して、将来的には、人々がよりアクセスできるようになり、この時点で、データベースへの要求の多くは、上記のすべてに影響を与える、データベースがあるため、クマやダウンタイムの失敗することがあります。
キャッシュサーバの再起動やキャッシュの数が多い時の障害の1つの期間に集中した場合、キャッシュは雪崩と呼ばれています。
ソリューション
-
異なる設定するための異なるキー、有効期限を。デフォルトの有効期限に加え、0-10分後に例えばランダムな値、集団的失敗を避けるために。
-
設定し、二次キャッシュを、有効期限が倍増しました。オリジナルのキャッシュの有効期限通知は、バックグラウンドで別のスレッドをトリガした場合、実際のキャッシュを更新し、古いデータの二次キャッシュに戻ります。
-
データ暖かいです。関連データの正式な展開先の前に直接リフレッシュするために、スケジュールされたタスクの後の行に、キャッシュにロード。
キャッシュの内訳
私はサイトがボーエンを書いた大スターを持っていることを前提とし、多くの人々はちょうど彼がキャッシュに近い関連とき、瞬間が期限切れになる彼を見るためにここに来
たデータベースへのリクエストが多いかもしれません。
シングルホットデータはキャッシュが故障と呼ばれ、有効期限の同時アクセスに高いです。
ソリューション
- セットホットデータが期限切れになることはありません。
- キャッシュミスした後、追加することによって、ミューテックススレッドの数を制御するために、書き込みキャッシュデータベースを読み込みます。スレッドがキーの故障を検出すると、他のスレッドは、ここで、読み込んでものを待っているときに、データベースの値は、データベースにアクセスできなくなりますが、ロックが有効期限を設定し、またはの値の場合にしなければならないキーロックに行きますスレッドは永続的にブロックされてハング。
キャッシュの浸透
私は、ファイアウォールを設定しなかった場合は、悪意のあるハッカーは、などの郵便配達不当な要求データ、などのツールを使用して、ID = -1、でも、データベースに過度の圧力が発生します攻撃そこには、このようなデータ・キャッシュ、データベースの値にそれぞれことなく、常にすることができますデータベースを倒します。
存在しないキーデータに対応する、キャッシュバイパスデータベースへの要求は、キャッシュが浸透と呼ばれます。
ソリューション
- 設定し、サーバ、ファイアウォール、管理およびIPアクセス数の多い違法行為を監視します。異なるIP効果がありません。
- 界面層の増加チェックサム。たとえば、ユーザ認証チェック、校正パラメータ、フィルタパラメータは有効ではありません。
- データベースを取得していない、これはまだ空の結果キャッシュ、値がnullに設定されている短い時間、欠点はおそらくヌル値の多くをキャッシュすることです、また、データの一貫性に影響を及ぼします。
- ブルームフィルタ。ビットマップ十分な大きさに可能なすべてのデータは、彼らが可能であり、ハッシュは、視覚的にデータが存在する場合がある場合、ビット異なるが、0は確かに戻らないデータベースに直接アクセスすることはないだろうかどうかを判断します。欠点は、データの合計量が大きい場合に、ブルームフィルタは、絶対的に正確されていない、非常に長くなることがあり、それが可能であり、他のすべてのデータビットは、データが存在しない場合です。
概要
もちろん、我々はまた、高可用性を活用することができます「と心の中で一つの足は」建てRedisの機能クラスタを、またはトラフィックの急増は、サービスの問題は、いくつかのデフォルトを返すために、非本質的なサービス、コアサービスがまだ利用可能であることを保証するためには、発生したとき値、またはヒント、ユーザーが再びリフレッシュすることができます。