キャッシュの浸透
キャッシュの浸透は、データが存在しないにつながるストレージ層からキャッシュに書き込まれていない場合見つけ出す、ヒットを書くときにキャッシュが受動的ではないので、存在しない、特定のクエリデータを参照し、フォールトトレラントの考慮事項についてデータ要求が照会を行うために、ストレージ層に行くたびに、キャッシュの意味を失いました。大きな流れは、可能性がある場合 DBはの不在の誰かのテイク利点場合、ハングアップキーは頻繁に私たちのアプリケーションを攻撃し、これは抜け穴です。
ソリューション
効果的にキャッシュの浸透の問題を解決するために多くの方法がありますが、最も一般的にはブルームフィルタを使用することがあり、十分な大きさに可能なすべてのデータのハッシュビットマップデータの特定の不存在下では次のようになりますビットマップこれ基盤となるストレージ・システム上のクエリの圧力を回避傍受オフ、。問い合わせは(データが存在しないか、またはシステム障害が)空のデータを返し、我々はまだ空のキャッシュ結果を参照してくださいが、その有効期限は、最長非常に短くなる場合、よりシンプルで、粗な方法もあり、 5分以上無いです。
キャッシュ雪崩
キャッシュを一度に無効化される我々は、キャッシュを設定し、同じ有効期限を使用して雪崩バッファ手段は、要求がすべてに転送される DB 、DB 瞬間圧力過大なアバランシェ。
ソリューション
基盤となるシステム上のキャッシュ無効化の影響は非常に恐ろしいです雪崩効果。ほとんどのシステム設計者は、キャッシュ・ラインまたはキューのロックを経由していることを確実にするために考慮すべき 同時要求の多数の失敗を回避するために、書き込みにプロセス(過程)が基盤となるストレージ・システム上に落ちます。ここでは簡単な解決策を共有するには、たとえば、キャッシュの有効期限を広げることで、私たちのような、本来の有効期限ごとにランダムな値を追加することができます 1-5 ランダム分なので、各キャッシュの有効期限の繰り返し率を低減させることになる、それがありますイベント集団的失敗を上げることは難しいです。
キャッシュの内訳
いくつかのセットのための有効期限キー、場合、キーは超高ポイントいくつかの時点で並行してアクセスすることができる、非常に「ホット」データであり、この時間は疑問を検討する:キャッシュは、「故障」であります問題は、この差は、ここでは雪崩キャッシュのことですキーキャッシュ、前者は多くのあるキーは。た時点でキャッシュは、ちょうどこの時点で、期限切れになったときに、このキーは、彼らは通常、バックエンドからのキャッシュの有効期限見つけ、これらの要求を超える同時要求を多数持っているDBのキャッシュおよびセットバック、今回の大同時要求への負荷データをあなたは即座にバックエンド置くことができるDBを圧倒し。
ソリューション
使用ミューテックス(ミューテックスキー)
もっと一般的に使用される業界の慣習が使用することです mutexを。キャッシュミスが(決定が出nullである)、にすぐにではない場合には、簡単に言えば、ロードDB 、しかし、のような演算値への操作に戻ります(である程度の成功を収めて使用された最初のキャッシュツールのRedis のSETNX やMemcacheのADD )する設定ミューテックスキーを操作リターンに成功、その後とき、デシベル読み込み、それ以外の場合は全体の再試行し、操作やキャッシュバックをGETのキャッシュ方法を。
パブリック文字列GET(キー){ String値 = redis.get(KEY); IF(値== NULL){ //はキャッシュの値が期限切れになる表す //は、操作が失敗した場合、タイムアウトがデル防止3分設定、次のキャッシュの有効期限が切れていDBロードしていない 文字列keynx = key.concat:( "NX" ;) IF(redis.setnx(keynx ,. 1、60 3 *)== 1){ // 代表正常に設定 値= db.get(キー) のRedis .SET(キー、値、expire_secs); redis.del(keynx); } 他{ // この時、他のスレッドに代わって、キャッシュ内の負荷デシベルとバックに同じ時間を持って、この時間リトライに値をキャッシュします スリープ(50 )。 (キー)を取得します。// 重试 } } そうでなければ{ 戻り値。 } }