每天進步一點,不做curd工程師與api調(diào)用工程師
博客網(wǎng)站:https://www.coder-programming.cn/
面試題
項目中緩存是如何使用的?為什么要用緩存?緩存使用不當會造成什么后果?
面試官心理分析
這個問題,互聯(lián)網(wǎng)公司必問,要是一個人連緩存都不太清楚,那確實比較尷尬。
只要問到緩存,上來第一個問題,肯定是先問問你項目哪里用了緩存?為啥要用?不用行不行?如果用了以后可能會有什么不良的后果?
這就是看看你對緩存這個東西背后有沒有思考,如果你就是傻乎乎的瞎用,沒法給面試官一個合理的解答,那面試官對你印象肯定不太好,覺得你平時思考太少,就知道干活兒。
面試題剖析
項目中緩存是如何使用的?
這個,需要結(jié)合自己項目的業(yè)務(wù)來。
為什么要用緩存?
用緩存,主要有兩個用途:高性能、高并發(fā)。
高性能
假設(shè)這么個場景,你有個操作,一個請求過來,吭哧吭哧你各種亂七八糟操作 mysql,半天查出來一個結(jié)果,耗時 600ms。但是這個結(jié)果可能接下來幾個小時都不會變了,或者變了也可以不用立即反饋給用戶。那么此時咋辦?
緩存啊,折騰 600ms 查出來的結(jié)果,扔緩存里,一個 key 對應(yīng)一個 value,下次再有人查,別走 mysql 折騰 600ms 了,直接從緩存里,通過一個 key 查出來一個 value,2ms 搞定。性能提升 300 倍。
就是說對于一些需要復雜操作耗時查出來的結(jié)果,且確定后面不怎么變化,但是有很多讀請求,那么結(jié)果直接放在緩存,后面直接讀緩存就好。
高并發(fā)
mysql 這么重的數(shù)據(jù)庫,壓根兒設(shè)計不是讓你玩兒高并發(fā)的,雖然也可以玩兒,但是天然支持不好。mysql 單機支撐到?2000QPS?也開始容易報警了。
所以要是你有個系統(tǒng),高峰期一秒鐘過來的請求有 1萬,那一個 mysql 單機絕對會死掉。你這個時候就只能上緩存,把很多數(shù)據(jù)放緩存,別放 mysql。緩存功能簡單,說白了就是 key-value 式操作,單機支撐的并發(fā)量輕松一秒幾萬十幾萬,支撐高并發(fā) so easy。單機承載并發(fā)量是 mysql 單機的幾十倍。
緩存是走內(nèi)存的,內(nèi)存天然就支撐高并發(fā)。
用了緩存之后會有什么不良后果?
常見的緩存問題有以下幾個:
緩存與數(shù)據(jù)庫雙寫不一致
緩存雪崩、緩存穿透
緩存并發(fā)競爭
等等...
還有許多不良的后果或者遇到的情況都可以跟面試官聊聊~