Redis也太好用了吧!難怪在國內(nèi)這么流行…

編程語言那么多,但不管你是從事Python、Java、Go、PHP、Ruby等,Redis都應(yīng)該是一個你比較熟悉的中間件。

Redis號稱支持并發(fā)11萬讀操作、并發(fā)8萬寫操作。由于優(yōu)異的性能和方便的操作, Redis在國內(nèi)各大公司都很熱門,比如阿里、騰訊、字節(jié)跳動、百度、美團、小米等。

可大部分經(jīng)常寫業(yè)務(wù)代碼的程序員,在實際工作中或許只用到了set value、GetValue兩個操作,而對Redis缺乏一個整體的認識。

只有當你真正深入去了解了Redis,才會發(fā)現(xiàn)Redis的無窮妙用,讓你在工作和面試中都如魚得水。

本文將從8個問題引入,帶你深刻理解Redis。(同時我還整理了一份Redis的學習指南,需要的朋友可以自取。)

1、為什么使用Redis?

項目中使用Redis,主要考慮性能和并發(fā)。如果僅僅是分布式鎖這些,完全可以用中間件Zookpeer等代替。

性能:

如下圖所示,在大并發(fā)的情況下,所有的請求直接訪問數(shù)據(jù)庫,數(shù)據(jù)庫會出現(xiàn)連接異常。這個時候,就需要使用Redis做一個緩沖操作,讓請求先訪問到Redis,而不是直接訪問數(shù)據(jù)庫。

可是,Redis也有慢查詢操作,應(yīng)該如何優(yōu)化?值得思考。

根據(jù)交互效果的不同,響應(yīng)時間沒有固定標準。在理想狀態(tài)下,我們的頁面跳轉(zhuǎn)需要在瞬間解決,對于頁內(nèi)操作則需要在剎那間解決。

并發(fā):

如下圖所示,在大并發(fā)的情況下,所有的請求直接訪問數(shù)據(jù)庫,數(shù)據(jù)庫會出現(xiàn)連接異常。這個時候,就需要使用Redis做一個緩沖操作,讓請求先訪問到Redis,而不是直接訪問數(shù)據(jù)庫。

2、使用Redis有什么缺點?

緩存和數(shù)據(jù)庫雙寫一致性問題

緩存雪崩問題

緩存擊穿問題

緩存的并發(fā)競爭問題

3、單線程的Redis為什么這么快?

多路復用Resp協(xié)議

單線程

內(nèi)存操作

(面試官會針對這幾點詳細提問)

4、Redis的數(shù)據(jù)類型及使用場景(這5種類型你用到過幾個?)

String:一般做一些復雜的計數(shù)功能的緩存;

Hash:存儲二維數(shù)據(jù)或?qū)ο螅?/p>

List:可實現(xiàn)隊列,棧及有序的數(shù)據(jù)存儲;

Set:常用于黑名單,微信抽獎等功能,應(yīng)用場景多變;

SortedSet:做排行榜應(yīng)用,取TOPN操作;延時任務(wù);做范圍查找。

5、Redis過期策略和內(nèi)存淘汰機制?

定期刪除,惰性刪除策略等;

6、Redis和數(shù)據(jù)庫雙寫一致性問題;

(最終一致性和強一致性)

7、如何應(yīng)對緩存穿透和緩存雪崩問題?

中小型的公司一般遇不到這些問題,但是大并發(fā)的項目,流量有幾百萬左右,這兩個問題一定要深刻考慮。

8、如何解決Redis并發(fā)競爭Key問題?

這個你知道怎么解答嗎?

這8個問題是來源于阿里面試真題,基本上你只要把上面這8個問題吃透,關(guān)于Redis絕對可以征服面試官!

這8個問題的詳細答案及《Redis學習指南》我已經(jīng)整理到了文檔里,需要的朋友可以私信或者在留言區(qū)獲取哈!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容