欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java如何解決內存緩存擊穿問題?

謝彥文2年前10瀏覽0評論

簡要說下緩存穿透,緩存擊穿,緩存雪崩的出現情景和解決方案!

出現上述問題的前提:因為數據庫使用磁盤存取數據,往往比較慢,而緩存使用內存(而且通常是key-value型),存取較快!

這樣先使用內存緩存來緩存數據庫數據,讀取數據的時候先從緩存讀取,只有獲取不到的時候才從數據庫獲??!


下面分別從概念,出現場景,解決方案來說:

①,緩存穿透

概念:訪問一個不存在的key,所有的讀取都會訪問數據庫,通常數據庫中也沒有這樣的數據,造成穿透,數據量大時,導致數據庫卡死!

出現情景:一般數據庫都是使用正整數來做id,然后使用id作為key緩存,如果有人惡意攻擊,傳一個負數(-100)做大量查詢,那么數據庫崩潰!

解決辦法:

1,設置攔截,對不符合要求的id直接攔截!

2,緩存不存在,數據庫也不存在也進行數據保存,key-null,并設置過期時間(短點好,1min),這樣能攔截短時間內大量的同一個key的穿透!

②,緩存擊穿

概念:緩存擊穿通常發生在超高并發的時候,緩存中的key超時過期,這時候大量的請求同一時間落到數據庫,造成數據庫卡死!

出現場景:秒殺活動通常會把商品id等提前進行緩存,如果某個正想辭職的程序員在設置過期時間的時候,把過期時間設在了秒殺前一刻,那秒殺開始的時候,大量的請求將直接訪問數據庫!

解決辦法:

1,熱點數據設置超長的過期時間(甚至forever)

2,人為干預:在活動開始前先對所有熱點數據進行設置!

③,緩存雪崩

概念:大批量的key過期,導致大量的查詢到了持久層,引起卡死!主要是大量的key,而緩存擊穿通常是一個或者少量key!

出現場景:緩存服務器宕機,代碼錯誤等導致key大量過期等原因!

解決方法:

1,高可用緩存集群,保證緩存不掛!

2,過期時間使用隨機算法,防止同一時間過期!

實際應用中,緩存雪崩是比較容易碰到的情況,還是尤其需要注意的,最近在持續分享JAVA相關的東西,需要的朋友可以關注。。。