二、Memcached緩存穿透、緩存雪崩
二、Memcached緩存穿透、緩存雪崩
1、 緩存雪崩 可能是數(shù)據(jù)魏加載到緩存中,或者緩存同一時(shí)間大面積失效,導(dǎo)致大量請(qǐng)求去數(shù)據(jù)庫(kù)查詢的過(guò)程,數(shù)據(jù)庫(kù)過(guò)載,崩潰。
解決方法: 1 采用加鎖計(jì)數(shù),使用合理的隊(duì)列數(shù)量來(lái)避免緩存失效時(shí)對(duì)數(shù)據(jù)庫(kù)造成很大的壓力,限制去數(shù)據(jù)庫(kù)查詢數(shù)量,降低了系統(tǒng)吞吐量。
2 分析用戶行為,盡量讓失效時(shí)間點(diǎn)分布均勻,避免緩存雪崩發(fā)生。
3 如果是某臺(tái)服務(wù)器宕機(jī),可采用主備。
2、 緩存穿透 緩存穿透是指用戶查詢數(shù)據(jù),在數(shù)據(jù)庫(kù)沒(méi)有,自然在緩存中也不會(huì)有。這樣就導(dǎo)致用戶查詢的時(shí)候,在緩存中找不到,每次都要去數(shù)據(jù)庫(kù)中查詢。
解決方法: 1 如果查詢數(shù)據(jù)庫(kù)也是空,直接設(shè)置一個(gè)默認(rèn)值,放入緩存,設(shè)置一個(gè)短的生存時(shí)間,下次查詢的時(shí)候,就直接從緩存中獲得。
2 過(guò)濾掉不符合規(guī)則的對(duì)象,適用于緩存對(duì)象有規(guī)律的時(shí)候。
3 對(duì)所有可能查詢的參數(shù)以hash形式存儲(chǔ),在控制層先進(jìn)行校驗(yàn),不符合則丟棄
3、緩存預(yù)熱
單機(jī)web系統(tǒng)情況下比較簡(jiǎn)單。
解決思路:
1,直接寫個(gè)緩存刷新頁(yè)面,上線時(shí)手工操作下。
2,數(shù)據(jù)量不大,可以在WEB系統(tǒng)啟動(dòng)的時(shí)候加載。
3,搞個(gè)定時(shí)器定時(shí)刷新緩存,或者由用戶觸發(fā)都行。
分布式緩存系統(tǒng),如Memcached,Redis,比如緩存系統(tǒng)比較大,由十幾臺(tái)甚至幾十臺(tái)機(jī)器組成,這樣預(yù)熱會(huì)復(fù)雜一些。
解決思路:
1,寫個(gè)程序去跑。
2,單個(gè)緩存預(yù)熱框架。
緩存預(yù)熱的目標(biāo)就是在系統(tǒng)上線前,將數(shù)據(jù)加載到緩存中
posted on 2018-05-21 16:27 圣彼得 閱讀(134) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)