Redis-在項目中緩存是如何使用的?緩存如果使用不當會造成什麼後果?

Redis的面試連環炮

面試題

項目中緩存是如何使用的?爲什麼要用緩存?緩存使用不當會造成什麼後果?

面試官心理分析

這個問題,互聯網公司必問,要是一個人連緩存都不太清楚,那確實比較尷尬。

只要問到緩存,上來第一個問題,肯定是先問問你項目哪裏用了緩存?爲啥要用?不用行不行?如果用了以後可能會有什麼不良的後果?

這就是看看你對緩存這個東西背後有沒有思考,如果你就是傻乎乎的瞎用,沒法給面試官一個合理的解答,那面試官對你印象肯定不太好,覺得你平時思考太少,就知道幹活兒。

面試題剖析

項目中緩存是如何使用的?

這個,需要結合自己項目的業務來。

爲什麼要用緩存?

用緩存,主要有兩個用途:高性能高併發

高性能

假設有這麼個場景,有一個操作,一個請求過來,然後執行N條SQL語句,然後半天才查詢出一個結果,耗時600ms,但是這個結果可能接下來幾個小時就不會變了,或者變了也可以不用立即反饋給用戶,這個時候就可以使用緩存了。

我們可以把花費了600ms查詢出來的數據,丟進緩存中,一個key對應一個value,下次再有人來查詢的時候,就不走mysql了,而是直接從緩存中讀取,通過key直接查詢出value,耗時2ms,性能提升300倍。這就是所謂的高性能。

就是把一些複雜操作耗時查詢出來的結果,如果確定後面不怎麼變化了,但是馬上還有很多讀請求,這個時候,就可以直接把結果存放在緩存中,後面直接讀取緩存即可。

image-20200421122211630

就第一次從數據庫中獲取,後面直接從緩存中獲取即可,性能提升很高

高併發

MySQL這麼重的數據庫,並不適合於高併發,雖然可以使用,但是天然支持的就不好,因爲MySQL的單機撐到2000QPS的時候,就容易報警了

image-20200421124116765

爲什麼緩存可以支持高併發

首先因爲緩存是走內存的,內存天然就可以支持高併發,但是數據庫因爲是存儲在硬盤上的,因此不要超過2000QPS

場景

所以要是有一個系統,高峯期過來每秒的請求有1W個,要是MySQL單機的話,一定會宕機的,這個時候就只能用上緩存,把很多數據放到緩存中,這樣請求過來了之後,就直接從緩存中獲取數據,而不查詢數據庫。緩存的功能很簡單,說白了就是一個 key - value式數據庫,單機支撐的併發量輕鬆超過一秒幾萬 到 十多萬,單機的承載量是mysql單機的幾十倍。

緩存帶來的不良後果

常見的緩存問題有以下幾個:

後面再詳細說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章