比如在同一時刻有5000個請求來訪問的我們的系統,請求先是到達快取,快取中沒有,然後就去資料庫中找,資料庫中找到之後就把結果放入快取中,下一次請求就直接走快取中拿,但是一旦快取宕機,此時如果沒有特別的方案來處理的話,請求就直接到達資料庫,資料庫一下就來了5000個請求,導致資料庫崩掉,這就是快取雪崩。
事前:保證redis集群進行高可用。主從+哨兵,redis cluster。
事中:hystrix限流&降級+系統內部ehcache快取,避免dba崩潰,
請求流程:使用者發起請求,先到達本地ehcache快取,ehcache中沒有就到redis中找,redis中沒有就到資料庫中查,然後將查到的結果寫入ehcache和redis中,,就算redis宕機,也還有ehcache可以抵擋一下,但是ehcache能力是有限的,所以需要加上hystrix限流&降級,一部分請求走ehcache, 沒有就走,hystrix限流元件,保證資料庫不會崩潰,
事後:redis持久化,快速恢復快取資料
想象一下這個情況,如果傳入的引數為-1,會是怎麼樣?這個-1,就是一定不存在的物件。就會每次都去查詢資料庫,而每次查詢都是空,每次又都不會進行快取。假如有惡意攻擊,就可以利用這個漏洞,對資料庫造成壓力,甚至壓垮資料庫。即便是採用uuid,也是很容易找到乙個不存在的key,進行攻擊。
可以會採用快取空值的方式,就是說如果從資料庫查詢的物件為空,也放入快取,只是設定的快取過期時間較短,比如設定為60秒。
快取擊穿,是指快取中乙個key非常熱點,在不停的扛著大併發,大併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在乙個屏障上鑿開了乙個洞。、
處理方案
比如在電商系統中,對訪問量非常高的商品,讓快取永不過期。即便某些商品自己發酵成了爆款,也是直接設為永不過期就好了
快取穿透 快取擊穿 快取雪崩
一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...
快取穿透,快取擊穿,快取雪崩
所謂的快取穿透,簡單來講就是查詢某些不存在的key時,快取和資料庫查詢結果都為空,而空的結果又不被快取起來,而導致每次查詢都去請求資料庫層的情況。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。過程 快取不命中,進而導致每次查詢都去查詢資料庫,快取也就失去了作...
快取穿透快取擊穿快取雪崩
1 快取穿透 1.1 什麼是快取穿透 快取穿透,是指查詢乙個資料庫一定不存在的資料 核心 快取和資料庫該值不存在 正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。1.2 帶來的...