このリンク:https://blog.csdn.net/kongtiao5/article/details/82771694
まず、キャッシュ処理の流れ
、既存のキャッシュデータを取り戻すために、データベースから取得したときよりも少ない方リターンの直接的な結果を取るために、キャッシュを更新するために取られたデータベース、および結果を返す受信要求、データベースが直接空の結果を返すように取得していません。
第二に、キャッシュの浸透
説明:
キャッシュとデータキャッシュ浸透手段は、データベースに存在しない、ユーザーが要求を開始していき、そのようなデータIDを開始するようにすることである「-1」データIDが特に大きい、または存在しません。今回は、ユーザーが攻撃者である可能性が高い、攻撃者は、データベースに過度の圧力を引き起こす可能性があります。
ソリューション:
ユーザ認証確認、ID基盤チェックとして、界面層の増加を確認するID <= 0、直接傍受;
にアクセスできないデータベースのキャッシュデータから取られていない、この時間は、キー-であってもよいです値がkey-nullに書き込まれ、キャッシュの有効時点が30秒(通常は使用することはできませんし、あまりにも長いリードセット)と短く設定することができます。これは、同じユーザーID暴力的な攻撃を使用して繰り返し攻撃を防ぎます
第三に、キャッシュの内訳
説明:
リードキャッシュデータが読み出されないがキャッシュ破壊は、次に起因同時ユーザーの特に多数に、キャッシュ・データベースが、既存データ(典型的には、キャッシュ時間が満了する)を意味するが、データベースにデータを取得すると同時に、データベースは、圧力による過度の圧力が生じる、瞬時増加
ソリューション:
設定したホットデータが期限切れになることはありません。
プラスミューテックスは、ミューテックス参照コードは次のように:
説明:
1)データをバッファ上のコードの後に直接移動、ライン13は、結果を返します
2)キャッシュにデータがない、スレッドへの最初のものがロックを取得し、データベースからデータをフェッチしないロックは、その後、データをフェッチするための再キャッシュを100ミリ秒を待機する他の並列スレッドに放出される前に。これは、データが発生し、データ・キャッシュを更新するために繰り返して取得する複製データベースを防ぎます。
ロックキーは、より良い、スレッドAは、データベースのデータから取得され、スレッドBのデータKEY1取らKEY2、上記のコードは明らかにこれを行うことができないと干渉しない値に応じた場合3)もちろん、これは、理論的には、簡略化した工程です。
四、缓存雪崩
描述:
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
解决方案:
1)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
2)如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
3)设置热点数据永远不过期。