在項目中緩存是如何使用的?緩存如果使用不當會造成什麽後果?
阿新 • • 發佈:2019-03-10
復雜 報警 理由 img ali qps ros 復雜查詢 耗時 這就是所謂的高性能。就是把你一些復雜操作耗時查出來的結果,如果確定後面不咋變了,然後但是馬上還有很多讀請求,那麽直接結果放緩存,後面直接讀緩存就好了。
1、面試題剖析
(1)在項目中緩存是如何使用的?
這個,你結合你自己項目的業務來,你如果用了那恭喜你,你如果沒用那不好意思,你硬加也得加一個場景吧!
(2)為啥在項目裏要用緩存呢?
用緩存,主要是倆用途,高性能和高並發
- 高性能
假設這麽個場景,你有個操作,一個請求過來,吭哧吭哧你各種亂七八糟操作mysql,半天查出來一個結果,耗時600ms。但是這個結果可能接下來幾個小時都不會變了,或者變了也可以不用立即反饋給用戶。那麽此時咋辦?
緩存啊,折騰600ms查出來的結果,扔緩存裏,一個key對應一個value,下次再有人查,別走mysql折騰600ms了。直接從緩存裏,通過一個key查出來一個value,2ms搞定。性能提升300倍。
- 高並發
mysql這麽重的數據庫,壓根兒設計不是讓你玩兒高並發的,雖然也可以玩兒,但是天然支持不好。mysql單機支撐到2000qps也開始容易報警了。
所以要是你有個系統,高峰期一秒鐘過來的請求有1萬,那一個mysql單機絕對會死掉。你這個時候就只能上緩存,把很多數據放緩存,別放mysql。緩存功能簡單,說白了就是key-value式操作,單機支撐的並發量輕松一秒幾萬十幾萬,支撐高並發so easy。單機承載並發量是mysql單機的幾十倍。
3)所以你要結合這倆場景考慮一下,你為啥要用緩存?
一般很多同學項目裏沒啥高並發場景,那就別折騰了,直接用高性能那個場景吧,就思考有沒有可以緩存結果的復雜查詢場景,後續可以大幅度提升性能,優化用戶體驗,有,就說這個理由,沒有??那你也得編一個出來吧,不然你不是在搞笑麽
(3)用了緩存之後會有啥不良的後果?
1)緩存與數據庫雙寫不一致
2)緩存雪崩
3)緩存穿透
4)緩存並發競爭
在項目中緩存是如何使用的?緩存如果使用不當會造成什麽後果?