redis緩存雪崩
redis雪崩是指redis在某個時間大量的key失效,突然造成數(shù)據(jù)庫訪問壓力增大,像雪崩一樣。
redis雪崩危害巨大,可能會導致服務器宕機。
解決方案:
1:緩存失效時間為隨機值。
2:根據(jù)不同類型的緩存,做好失效時間策略。
3:采取多級緩存。
Redis緩存穿透
緩存穿透,是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù),用戶不斷發(fā)起請求,由于該數(shù)據(jù)不在緩存中,所以會一直訪問數(shù)據(jù)庫,造成數(shù)據(jù)庫壓力過大。
解決方案:
1:對于一些不合理的key,直接返回空。(例如查詢是,id為負數(shù)的請求)
2:對于數(shù)據(jù)庫為null的數(shù)據(jù),也緩存起來。
Redis緩存擊穿
緩存雪崩是大量的key,同一時間失效。緩存擊穿則是某一個key在失效的一瞬間,大量的并發(fā)請求到達服務端,造成瞬間數(shù)據(jù)庫壓力過大:,如秒殺活動等。
解決方案:
1: 對于熱點key,設置為永不過期。(會造成緩存中存在大量的key,而這些key的訪問頻率并不高,同時也要考慮緩存與數(shù)據(jù)庫的同步問題)
2:使用分布式鎖,保證同一時間只有一個線程去訪問數(shù)據(jù)庫,其他線程等待。(會降低服務器的相應時間,也可能存在死鎖等風險)
總結
緩存存在的意義就是為了減輕數(shù)據(jù)庫的查詢壓力,從而提高服務的QPS。而緩存的雪崩、穿透、擊穿都是在緩存失效的時候出現(xiàn)的。所以對于緩存的時候,需要結合業(yè)務,來處理相關的情況。