所有這些快取的問題都是因為為使用快取查詢資料而導致的對資料庫造成的瞬間壓力使用快取帶來的影響
以為犧牲資料一致性為代價換來了更大的併發量
顧名思義,穿透的意思是快取層永遠不起作用。
1 查詢快取中是否存在這一條資料
2 如果不存在則查詢資料庫
3 如果資料庫中存在這一條資料,則將資料重新整理到快取中,如果不存在則不做操作
從上面的流程中我們可以看出:
想象一下這個情況,如果傳入的引數為-1,會是怎麼樣?這個-1,就是一定不存在的物件。就會每次都去查詢資料庫,而每次查詢都是空,每次又都不會進行快取。假如有惡意攻擊,就可以利用這個漏洞,對資料庫造成壓力,甚至壓垮資料庫。即便是採用uuid,也是很容易找到乙個不存在的key,進行攻擊。
解決策略:
將這條一定不存在的資料也快取到資料庫中,但是因為這條資料沒有實際意義,因此要把他的過期時間設定得短一些(如60s)
顧名思義,雪崩意思是大量快取失效。快取是有失效的時間的。如果大量快取在同乙個時間同時失效,那麼會導致資料庫壓力急劇上公升。如果快取失效的時間是相同的,那麼資料庫的壓力成週期性變化。
解決策略:
將不同的資料的快取失效的時間設定為不同的(加隨機因子,將資料分類)
顧名思義,雪崩意思是針對單個快取。當乙個快取的資料在失效時突然面對大量併發,這時大量的請求會請求到資料庫,因此發生快取擊穿。
解決策略:
預先將熱點資料設定為永久快取
快取常見問題
情況 在流量大時,如果有人利用不存在的key頻繁去訪問我們的應用,可能會導致資料庫掛掉。原因 查詢乙個不存在的資料,由於快取是不命中時被動寫入,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。解決方案 1 布隆過濾器 將所有可...
快取常見問題
快取穿透是指快取沒有發揮作用,業務系統雖然去快取中查詢資料,但快取中沒有資料,業務系統需要再次去儲存系統中查詢資料。通常情況下有兩種情況 儲存資料不存在,以及生成快取資料需要耗費大量時間或資源。快取穿透的常見解決辦法有兩種 回種空值和使用布隆過濾器。快取雪崩是指當快取失效 過期 後引起系統系統效能急...
快取常見問題總結
1.現象 request請求在cache中未找到資料,直接查詢storage 2.原因 2.1業務 自身問題 在資料庫中未找到資料,進入死迴圈 2.2惡意攻擊 爬蟲等 大量不存在資料查詢資料庫,進入死迴圈 3.如何發現 3.1業務響應時間 3.2業務本身問題 4.解決方法 4.1快取空物件 儲存層返...