編程語言那么多,但不管你是從事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ū)獲取哈!


