2023-06-27:redis中什么是緩存雪崩?該如何解決?
2023-06-27:redis中什么是緩存雪崩?該如何解決?
答案2023-06-27:
緩存雪崩是指當(dāng)緩存層承載大量請(qǐng)求并有效保護(hù)存儲(chǔ)層時(shí),如果緩存層由于某些原因無法提供服務(wù),例如緩存數(shù)據(jù)大面積失效,那一瞬間 Redis 就像不存在一樣,導(dǎo)致所有請(qǐng)求都到達(dá)存儲(chǔ)層。存儲(chǔ)層的請(qǐng)求量急劇增加,可能導(dǎo)致存儲(chǔ)層級(jí)聯(lián)宕機(jī)的情況發(fā)生。
緩存雪崩,英文原意為"stampeding herd"(奔逃的獸群),形象地比喻了緩存層宕掉后,流量會(huì)像奔逃的獸群一樣,涌向后端存儲(chǔ)層。
預(yù)防和解決緩存雪崩問題,可以從以下四個(gè)方面入手:
1)確保緩存層的高可用性。與一架飛機(jī)擁有多個(gè)引擎類似,如果設(shè)計(jì)一個(gè)高可用的緩存層,即使個(gè)別節(jié)點(diǎn)、機(jī)器甚至整個(gè)機(jī)房宕掉,仍能提供服務(wù)。例如,Redis Sentinel和Redis Cluster都實(shí)現(xiàn)了高可用性。
2)依賴隔離組件進(jìn)行后端流量限制和降級(jí)。無論是緩存層還是存儲(chǔ)層,都存在出錯(cuò)的概率。將它們視為資源,并對(duì)并發(fā)較高的系統(tǒng)進(jìn)行限流和降級(jí),防止一個(gè)資源的不可用性導(dǎo)致線程阻塞(hang),從而造成整個(gè)系統(tǒng)不可用。
3)提前進(jìn)行演練。在項(xiàng)目上線之前,進(jìn)行緩存層宕掉后、應(yīng)用和后端負(fù)載情況以及可能出現(xiàn)的問題的演練,以便制定相應(yīng)預(yù)案。
4)隨機(jī)分散緩存失效時(shí)間。例如,在原有失效時(shí)間的基礎(chǔ)上增加一個(gè)隨機(jī)值,如1-5分鐘的隨機(jī)范圍,使每個(gè)緩存過期時(shí)間的重復(fù)率降低,從而減少集體失效事件的發(fā)生。