1.快取穿透:查詢乙個一定不存在的資料,由於快取一定不命中,將查詢資料庫,並且沒有將null寫入快取,這將導致這個不存在的資料每次請求都到儲存層查詢。
風險:利用不存在的資料進行攻擊,資料庫瞬時壓力增大,最終導致崩潰。
解決方案:null結果快取,並加入短暫過期時間。
2.快取雪崩:指設定快取時key採用了相同的過期時間,導致快取在某一時刻同時失效,請求全部**到儲存層,導致資料庫瞬時壓力過重雪崩。
解決方案:原有的失效時間基礎上增加乙個隨機值,這樣每乙個快取的過期時間的重複率就會減低。
3.快取擊穿:如果一些熱點資料在大量請求同時進來前正好失效,那麼所有對這些key的資料查詢都將落到資料庫。
解決辦法:加鎖,大量併發只讓乙個請求查詢,其他人等待,查到以後釋放鎖,其他請求獲取到鎖,先查詢快取,而不用查詢資料庫。
單伺服器解決快取擊穿:
synchronized(this)elseelse{
//加鎖失敗...自旋重試
高併發下快取失效問題
快取穿透 指查詢乙個一定不存在的資料,由於快取是不命中,將去查詢資料庫,但是資料庫也無此記錄,我們沒有將這次查詢的null寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義 風險 利用不存在的資料進行攻擊,資料庫瞬時壓力增大,最終導致崩潰 解決 null結果快取,並加入短...
高併發下快取技術應用
背景 在某些電商促消活動中需要搞活動,對某些頁面的訪問量 qps 往往會非常高。如果直接讀資料庫,肯定db會承受不住。那比較常見的方案就是讓大部分相同資訊的請求都盡可能壓在cache上來緩解db的壓力,從而盡可能去滿足高併發訪問的需求 優化 這種快取技術一般用於不會經常變動資訊,並且訪問次數較多的頁...
高併發下快取穿透 快取雪崩,快取擊穿
併發進來後第乙個請求到達資料庫後,得到的資料並不存在,那麼這時返回null,這個null也會同時存在快取中,然而做快取判斷是,快取中為null就會去資料庫中查詢,那麼這時後面的併發,在來查詢這個不存在的資料是都會進入資料庫 導致資料庫壓力過大,從而導致系統崩潰 快取的key大面積的失效,如100萬的...