更新時間:2023-08-24 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
緩存雪崩是緩存中大量key失效后當(dāng)高并發(fā)到來時導(dǎo)致大量請求到數(shù)據(jù)庫,瞬間耗盡數(shù)據(jù)庫資源,導(dǎo)致數(shù)據(jù)庫無法使用。
造成緩存雪崩問題的原因是是大量key擁有了相同的過期時間,比如對課程信息設(shè)置緩存過期時間為10分鐘,在大量請求同時查詢大量的課程信息時,此時就會有大量的課程存在相同的過期時間,一旦失效將同時失效,造成雪崩問題。
1、使用同步鎖控制查詢數(shù)據(jù)庫的線程
使用同步鎖控制查詢數(shù)據(jù)庫的線程,只允許有一個線程去查詢數(shù)據(jù)庫,查詢得到數(shù)據(jù)后存入緩存。
Java
synchronized(obj){
//查詢數(shù)據(jù)庫
//存入緩存
}2、對同一類型信息的key設(shè)置不同的過期時間
通常對一類信息的key設(shè)置的過期時間是相同的,這里可以在原有固定時間的基礎(chǔ)上加上一個隨機(jī)時間使它們的過期時間都不相同。示例代碼如下:
Java
//設(shè)置過期時間300秒
redisTemplate.opsForValue().set("course:" + courseId,
JSON.toJSONString(coursePublish),300+new Random().nextInt(100),
TimeUnit.SECONDS);3、緩存預(yù)熱
不用等到請求到來再去查詢數(shù)據(jù)庫存入緩存,可以提前將數(shù)據(jù)存入緩存。使用緩存預(yù)熱機(jī)制通常有專門的后臺程序去將數(shù)據(jù)庫的數(shù)據(jù)同步到緩存。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19