一次緩存雪崩的思考

場景:我們爲了提高接口的響應時間,在一些高併發的場景(例如我們app的首頁,分享頁),都會做redis緩存,redis緩存大多數情況下我們都會設置有效時間,此時就可能出現緩存雪崩的情況,也就是在高併發時緩存失效,同一時間都去訪問mysql,當然訪問mysql是在設置了懶加載的情況(就是緩存沒有取到,就去數據庫取),此時就可能造成mysql巨大的壓力,我們採用的方法一般是這幾個。
1.不採用懶加載,手動初始化或定時初始化
此方法適用於非必要數據,且併發量比較大,比如我們平臺的流量池數據,沒有對整個系統不會有影響。此時就可以採用此方法,第二天再查看日誌查找原因
2.採用synchronized加鎖懶加載
此方法適用於每個用戶的數據是一樣的情況,比如我們平臺的熱門視頻,由於我們熱門視頻對於所有視頻都是一樣的,如果緩存失效,此時mysql的所有查詢請求都是一樣的,會浪費很多的數據庫鏈接數。所以同一時間保證一個請求成功,其他就可以從redis取了,大大減少了mysql的壓力
3.採用線程池進行懶加載
此方法適用於每個用戶的數據不一樣,使用線程池可以使高併發變成可控的低併發,但是響應時間會變慢很多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章