天天看點

【吊打面試,擊中要害】緩存穿透、緩存擊穿和緩存雪崩

閱讀文本大概需要3分鐘。    

       2019磕磕碰碰總算過去了,2020年秉承開源共享原則,繼續分享在工作中遇到的各種問題和幹貨。2020年在面試題開始,祝願小夥伴在2020年都能謀到一份好差事。

【吊打面試,擊中要害】緩存穿透、緩存擊穿和緩存雪崩

0x01:緩存穿透

       在高并發情況下,查詢一個資料庫和緩存都不存在的值時;如果緩存服務不對這個不存在的值進行緩存,導緻緩存不會被命中,而大量請求直接落到資料庫上。這種情況就叫緩存擊穿。這種情況就是緩存和資料庫都沒有響應的值。

解決方案:

  • 緩存的key要按一定規則生成,然後集中攔截所有請求緩存的Key,如果請求的Key不滿足既定的生成規則,就拒絕通路。
  • 對于NULL值,也直接緩存,但是緩存NULL的時間不能太長,否則NULL資料長時間得不到更新,也不能太短,否則達不到防止緩存擊穿的效果

0x02:緩存擊穿

       在高并發情況下,對一個特定的值進行查詢,但是這個時候緩存正好過期了,緩存沒有命中,而導緻大量請求直接通路資料庫,如活動系統裡面查詢活動資訊。這種情況就是緩存沒有對應的值,資料庫有對應的值。

  • 設定熱點Key對應的資料永遠不過期
  • 讀取資料庫資料進行緩存時,增加互斥鎖

0x03:緩存雪崩

       在高并發情況下,大量的緩存key在同一時間一起失效,導緻大量的請求在緩存中擷取不到資料,而直接通路資料庫。

  • 盡量設定Key失效時間點均勻分布,即不同的Key設定不同的過期時間
  • 如果緩存資料庫采用的是分布式部署,将熱點資料均勻分布在不同的緩存資料庫中
  • 設定熱點資料永遠不過期

繼續閱讀