穿透: 從緩存中查詢一個數據,查到為空,需要每次都去資料庫中查詢。而從資料庫中查詢出來也為空,也就不寫入緩存。導致一個不存在的數每次都去資料庫中查詢,造成db系統很大壓力 造成緩存穿透 解決:如果從資料庫中查詢結果為空,我們也要緩存起來,避免下次訪問緩存中沒有,而去訪問資料庫 雪崩:緩存在一段是時間 ...
穿透: 從緩存中查詢一個數據,查到為空,需要每次都去資料庫中查詢。而從資料庫中查詢出來也為空,也就不寫入緩存。導致一個不存在的數每次都去資料庫中查詢,造成db系統很大壓力 造成緩存穿透
解決:如果從資料庫中查詢結果為空,我們也要緩存起來,避免下次訪問緩存中沒有,而去訪問資料庫
雪崩:緩存在一段是時間內失效,導致所有的查詢都落在資料庫上,甚至導致資料庫宕機,造成緩存雪崩
解決:1.不同的key設置不同的過期時間
2.併發量不大的情況下,訪問資料庫的時候可以加鎖排隊 (高併發的情況下 不適用)
3 給緩存的數據設置一個緩存標記,記錄是否失效, 另起一個線程去監測哪個緩存失效,如果失效,則更新緩存