redis的面試必備知識點

2020-09-22 動漫剪輯學徒


點讚再看,越點越帥

redis全網面試總結開始了

  • 1.面試官:redis有哪些數據類型和數據結構:2.面試官:可以聊一下redis的分布式鎖嗎?3.面試官:keys指令能說一下嗎?4.面試官:知道Redis的隊列嗎?可以說明幾個嗎?6.面試官:可以說說Redis的持久化機制嗎?7.面試官:可以聊一下如果機器斷電了會對redis造成什麼影響嗎?8.面試官:可以說一下你了解的redis的集群嗎?9.面試官:說一下持久化中RDB和AOF各自的優缺點吧。10.面試官:說一下redis的內存淘汰機制和與memcache的區別吧。


首先面試redis的基礎知識:

1.面試官:redis有哪些數據類型和數據結構:

我:redis有5種數據結構:String,Hash,List,Set,SortedSet
其他數據結構有:HyperLog,Geo,Pub/Sub(訂閱與發布)
還有用於防止緩存擊透的數據結構:Redis Module
然後還有一個設置key值的過期時間 :setRedis(Key,value,time+Math.random()*10000); expire

2.面試官:可以聊一下redis的分布式鎖嗎?

我:(媽耶這麼快就直接到鎖了嘛?我假裝淡定)這個可以使用setnx這個命令來實現,首先用setnx來爭搶鎖,搶到之後,在用expire給鎖加一個過期時間,用來防止自己在之後的操作忘記釋放鎖導致鎖死,當然這裡一般處理完成都可以手動釋放鎖,然後如果在setnx之後執行expire之前進程意外crash或者要重啟維護,就需要把setnx和expire合成一條指令來用。

3.面試官:keys指令能說一下嗎?

我:Redis是單線程的,keys指令會導致線程阻塞一段時間,線上的服務會停頓,知道指令執行完畢,服務才能恢復。相比於scan指令可以無阻塞的提取出指定模式的key列表,但是會有一定的重複概率,在客戶端做一次去重就可以了,但是總體的時間花費是要比keys命令長的。
smembers命令可以返回集合鍵當前包含的所有元素。
對於scan這類增量式迭代命令來說,因為在對鍵進行增量式迭代的過程中,鍵可能會被修改,所以增量式迭代命令只能對被返回值的元素提供有限的保證。

4.面試官:知道Redis的隊列嗎?可以說明幾個嗎?

我:首先redis有異步隊列和一個延時隊列,
異步隊列:
1.list結構作為隊列,rpush生產消息。lpop消費消息,當lpop沒有消息的時候,要適當的sleep一會再重試。
2.list還有一個指令叫blpop,在沒有消息的時候,他會阻塞直到消息到來。
3.pub/sub主題訂閱模式,可以實現1:N的消息隊列,實現生產一次,消費多次
4.pub/sub主題訂閱模式,消費者下線的情況下,生產的消息會丟失,得使用專業的消息隊列,如kafka ,rabbitMQ
延時隊列:
sortedset,那時間戳作為score,消息內容作為ke調用zadd來生產消息,消費者用zrangebyscore指令獲取N秒之前的數據輪詢進行處理。

6.面試官:可以說說Redis的持久化機制嗎?

我:首先Redis是支持持久化操作的,這個是毋庸置疑,然後redis的持久化機制有兩種,一種是AOF的方式,一種是RDB的方式做的持久化。
先說說RDB做持久化:RDB做鏡像全量的持久化,AOF做增量持久化,首先因為RDB會耗費較多的時間和資源,不夠實時,在停機的時候回導致大量的丟失數據,所以需要AOF日誌信息來配合使用,首先恢復RDB中的數據,然後用AOF來恢復剩餘的數據,因為RDB數據恢復來說是比較容易的,所以先RDB恢復一部分完整數據。
在redis實例重啟時,會使用RDB持久化文件重新構建內存信息,在使用AOF從放近期的操作指令來實現完整恢復重啟之前的狀態。
然後Redis本身的機制是AOF持久化開啟且存在Aof文件時,有限加載AOF文件;AOF關閉或者AOF文件不存在時,加載RDB文件;加載AOF/RDB文件後,redis啟動成功,AOF/RDB文件存在錯誤時,redis啟動失敗並且列印錯誤信息。

7.面試官:可以聊一下如果機器斷電了會對redis造成什麼影響嗎?

我:AOF日誌的sync屬性的配置,如果不要求性能,在每條指令都sync一下磁碟,就不會丟失數據,但是這在高性能的情況下是不行的,高性能要求sync磁碟一般如果是一秒一次,那麼斷電就會造成一秒的數據丟失。
順便說一下RDB的原理:Fork是指redis用過創建子線程來進行RDB操作,cow指的是copy on write ,子進程創建後,父進程共享數據段,父進程繼續提供讀寫服務,寫髒的頁面數據,會逐漸與子進程分離開來。
pipeline的好處:可以將多次io往返的時間縮短為一次,前提是pipeline執行的指令之間沒有因果關係;

8.面試官:可以說一下你了解的redis的集群嗎?

我:Redis有三種集群模式,分別是:
主從模式:主從模式是三種模式中最簡單的,在主從複製中,資料庫分為兩類:主資料庫(master)和從資料庫
主從複製的特點:

  1. 主資料庫可以進行讀寫操作,當讀寫操作導致數據變化時會自動將數據同步給從資料庫
  2. 從資料庫一般都是只讀的,並且接收主資料庫同步過來的數據
  3. 一個master可以擁有多個slave,但是一個slave只能對應一個master
  4. slave掛了不影響其他slave的讀和master的讀和寫,重新啟動後會將數據從master同步過來
  5. master掛了以後,不影響slave的讀,但redis不再提供寫服務,master重啟後redis將重新對外提供寫服務
  6. master掛了以後,不會在slave節點中重新選一個master

工作機制:
當slave啟動後,主動向master發送SYNC命令。master接收到SYNC命令後在後臺保存快照(RDB持久化)和緩存保存快照這段時間的命令,然後將保存的快照文件和緩存的命令發送給slave。slave接收到快照文件和命令後加載快照文件和緩存的執行命令。
複製初始化後,master每次接收到的寫命令都會同步發送給slave,保證主從數據一致性。
缺點:
從上面可以看出,master節點在主從模式中唯一,若master掛掉,則redis無法對外提供寫服務。

Sentinel模式(哨兵模式):
主從模式的弊端就是不具備高可用性,當master掛掉以後,Redis將不能再對外提供寫入操作,因此sentinel應運而生。
sentinel中文含義為哨兵,顧名思義,它的作用就是監控redis集群的運行狀況,特點如下

  1. sentinel模式是建立在主從模式的基礎上,如果只有一個Redis節點,sentinel就沒有任何意義
  2. 當master掛了以後,sentinel會在slave中選擇一個做為master,並修改它們的配置文件,其他slave的配置文件也會被修改,比如slaveof屬性會指向新的master
  3. 當master重新啟動後,它將不再是master而是做為slave接收新的master的同步數據
  4. sentinel因為也是一個進程有掛掉的可能,所以sentinel也會啟動多個形成一個sentinel集群
  5. 多sentinel配置的時候,sentinel之間也會自動監控
  6. 當主從模式配置密碼時,sentinel也會同步將配置信息修改到配置文件中,不需要擔心
  7. 一個sentinel或sentinel集群可以管理多個主從Redis,多個sentinel也可以監控同一個redis
  8. sentinel最好不要和Redis部署在同一臺機器,不然Redis的伺服器掛了以後,sentinel也掛了

工作機制:

  1. 每個sentinel以每秒鐘一次的頻率向它所知的master,slave以及其他sentinel實例發送一個 PING 命令
  2. 如果一個實例距離最後一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被sentinel標記為主觀下線。
  3. 如果一個master被標記為主觀下線,則正在監視這個master的所有sentinel要以每秒一次的頻率確認master的確進入了主觀下線狀態
  4. 當有足夠數量的sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認master的確進入了主觀下線狀態, 則master會被標記為客觀下線
  5. 在一般情況下, 每個sentinel會以每 10 秒一次的頻率向它已知的所有master,slave發送 INFO 命令
  6. 當master被sentinel標記為客觀下線時,sentinel向下線的master的所有slave發送 INFO 命令的頻率會從 10 秒一次改為 1 秒一次
  7. 若沒有足夠數量的sentinel同意master已經下線,master的客觀下線狀態就會被移除;
  8. 若master重新向sentinel的 PING 命令返回有效回復,master的主觀下線狀態就會被移除
  9. 當使用sentinel模式的時候,客戶端就不要直接連接Redis,而是連接sentinel的ip和port,由sentinel來提供具體的可提供服務的Redis實現,這樣當master節點掛掉以後,sentinel就會感知並將新的master節點提供給使用者

Cluster模式:
Cluster模式介紹:
sentinel模式基本可以滿足一般生產的需求,具備高可用性。但是當數據量過大到一臺伺服器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了,這個時候需要對存儲的數據進行分片,將數據存儲到多個Redis實例中。cluster模式的出現就是為了解決單機Redis容量有限的問題,將Redis的數據根據一定的規則分配到多臺機器。

cluster可以說是sentinel和主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis實例。因為Redis的數據是根據一定規則分配到cluster的不同機器的,當數據量過大時,可以新增機器進行擴容。
使用集群,只需要將redis配置文件中的cluster-enable配置打開即可。每個集群中至少需要三個主資料庫才能正常運行,新增節點非常方便。
cluster集群特點:

  • 多個redis節點網絡互聯,數據共享
  • 所有的節點都是一主一從(也可以是一主多從),其中從不提供服務,僅作為備用
  • 不支持同時處理多個key(如MSET/MGET),因為redis需要把key均勻分布在各個節點上,
    並發量很高的情況下同時創建key-value會降低性能並導致不可預測的行為
  • 支持在線增加、刪除節點
  • 客戶端可以連接任何一個主節點進行讀寫

9.面試官:說一下持久化中RDB和AOF各自的優缺點吧。

我:RDB:RDB是作為冷備的,RDB持久化機制,是對Redis中的數據執行周期的持久化。
優點:RDB對Redis的性能影響非常的小,是因為在同步數據的時候他只是fork了一個子進程去做持久化的,而他在數據恢復時候的速度比AOF來的塊。
缺點:RDB都是快照文件,都是默認5分鐘甚至更久才會生成一次備份,這就意味著你這次同步到下次同步這中間的數據都很有可能全部丟失,AOF則最多丟失一秒的數據,RDB在生成樹快照的時候,如果文件過大,客戶端肯會暫停幾毫秒到幾秒。
AOF:作為redis的熱備,AOF機制對每條寫入命令作為日誌以append-only 的模式寫入一個日誌文件中
優點:AOF是一秒一次去通過一個後臺的線程fsync操作,那最多丟失這一秒的數據,AOF在對日誌文件進行操作的時候回是以append-only的方式去寫的,他只是追加的方式寫數據,自然少了很多磁碟尋址的開銷。
缺點:對於同一份數據來說,AOF日誌文件通常比RDB數據快照文件更大,恢復速度慢。

10.面試官:說一下redis的內存淘汰機制和與memcache的區別吧。

我:首先內存淘汰機制即過期策略有:
定期刪除:默認100ms就隨機抽一些過時間的key,去檢查是否過期,過期就刪除
惰性刪除:我不主動刪除,等人來查詢,看看有沒有過期,過期了就刪除,沒有過期就給你返回值。
定期沒有刪除,我也沒有去查詢,怎麼辦? 這就需要淘汰機制的設定。
然後redis和memcache的區別如下
首先 redis相比memcached來說,擁有跟多的數據結構,能支持更豐富的數據操作。
在redis3.x版本中可以支持cluster模式,而memcached沒有原生的集群模式,需要依賴客戶端來實現往集群中分片寫入數據。
redis只使用單核,而memcached可以使用多核,所以平均每一個核上redis在存儲小數據時比memcached性能更高。

好的,這次redis的面試就到這裡,小夥子很不錯,基本的問題都答出來了,回去等下一次面試消息吧,順便說一下下一次的面試內容會是大數據相關的喲,多複習複習。

相關焦點

  • 45k以上突擊面試必備,redis+mysql+並發+spring+算法+導圖等
    今天小編給大家帶來的一篇關於Java面試相關的電子文檔資源,介紹了關於Java、面試題方面的內容,本書是由Java官網出版,格式為DOC,資源大小62.5 MB,目前豆瓣、亞馬遜、噹噹、京東等電子書綜合評分為:8.7。
  • JAVA架構師必備詞彙和知識點
    01 作業系統Linux(必備)、某軟的02 負載均衡DNS、F5、LVS、Nginx、OpenResty、HAproxy、負載均衡SLB03 分布式框架Dubbo、Motan、Spring-Could04 資料庫中間件DRDS 、Mycat、360 Atlas、Cobar (不維護了)
  • JAVA工作面試必須具備的知識點
    下面是我總結的工作或者面試必備的一些知識點,供大家參考。你也可以和培訓機構的課程大綱就下對比,來確定優劣。也可以檢測一下自己的知識是不是能跟上時代的要求。這是我培訓java的一些基本要求,如果有不充分的地方,請指出。還有的同學問,要掌握這些知識需要多少時間?網上有許多培訓機構宣稱可以用5-6個月的時間完成,還有一些人說只需要3-4個月就可以了。
  • 必問Redis面試題—媽媽再也不用擔心我面試被問Redis了
    當今網際網路技術架構中 Redis 已然成為了應用得最廣泛的中間件之一,它也是中高級後端工程技術面試 中面試官最喜歡問的工程技能之一,不僅僅要求著我們對基本的使用進行掌握,更要深層次地理解 Redis 內部實現的細節原理。
  • 「面試」吃透了這些Redis知識點,面試官一定覺得你很NB
    保證不了原子性是因為redis不支持回滾,不過它也給出了不支持的理由。不支持回滾的理由:1、redis認為,失敗都是由命令使用不當造成2、redis這樣做,是為了保持內部實現簡單快速3、redis還認為,回滾並不能解決所有問題哈哈,這就是霸王條款,因此,好像使用redis事務的不太多管道客戶端和集群的交互過程是串行化阻塞式的
  • 這些redis很基礎,卻難倒無數英雄,若不是這次面試我還不信
    今天內容很充實,就是把redis的知識點進行一個完美的集合,把redis所涉及的到技術進行整理,方便大家學習,也方便複習1|0 目錄相應的內容已經整理形成思維導圖,後面會將其他的知識點進行補充完整,當然,各位也可以根據自己的想法去完善這張思維導圖
  • Redis面試知識點
    : Not only SQL,不只是資料庫,泛指非關係型資料庫,比如redis。Redis 事務Redis 事務: redis事務的本質是一組命令的集合,一個事務的所有命令都會被序列化,在事務的執行過程中,會按照順序執行。所有的命令並不是直接就執行,而是發起執行命令才會執行!
  • 絕對值得一看的35個Redis面試題總結
    有個大佬,一說redis就問我為什麼使用redis,redis單線程為什麼這麼快,redis…下面是redis的部分面試題,自己整理的,當然實際工作中使用的redis比較簡單,但是了解redis部分底層還是有必要的!
  • 搞懂這些Redis知識點,吊打面試官!
    RedisTemplate 來使用,使用 Spring Cache 集成 Redis pom.xml 中加入以下依賴:<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis
  • Redis之父走了,但Redis可涼不了
    最近面試大廠的人,不被問到幾個Redis相關的問題,就好像沒有參加過面試一樣。我最近在後臺也收到了不少相關的提問,乾脆整理了一下在面試裡常常碰到的Redis問題。如果你能輕鬆搞定這些問題,大廠面試不過是小場面!1.Redis支持的數據類型?
  • 半夜不睡覺,竟躲在廁所看這些「Redis面試題」?
    花了大量時間整理了這套Redis面試題首發57題,絕無僅有從入門到精通從基礎,高級知識點再到集群,運維,方案…弄明白了這些題可以說可以成為面霸了面試官都得折服MySQL裡有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?Redis有哪些適合的場景?Redis支持的Java客戶端都有哪些?官方推薦用哪個?Redis和Redisson有什麼關係?Jedis與Redisson對比有什麼優缺點?
  • Redis數據結構面試必備
    Last login: Wed Mar 20 22:04:22 2019 from 192.168.80.1[root@zh_linux ~]# reddis-cli -h 192.168.80 -p 6379-bash: reddis-cli: command not found[root@zh_linux ~]# redis-cli
  • 面試阿里不到半小時被破格錄取,問我原因?還不是因為Redis
    還是C++都會問到,所以是個高頻面試區。於是我信心滿滿的就去了阿里巴巴面試高級Java工程師的崗位,可能是由於我太過於優秀,面試只用了不到半個小時面試官就喊停了。。。還記得當時我正在面試大廳等著面試,迎面走來一位幹練中年男子,頭上真的沒幾根毛!!!
  • 高頻面試必備(Java研發崗):問到懷疑人生的BATJ面試題分享
    前言面試是找工作的必修課,在這短短的幾十分鐘裡,不僅要讓面試官認可你的專業能力,而且還有你的人品特點以及職業方向。這樣我們在回答面試官問題的時候就需要一些語言技巧來包裝自己,這對那些不善言語的程式設計師尤為重要,會直接影響你的薪資。
  • 老公半夜不睡覺,竟躲在廁所看這「57道Redis面試題」?
    花了大量時間整理了這套Redis面試題首發57題,絕無僅有從入門到精通從基礎,高級知識點再到集群,運維,方案…弄明白了這些題可以說可以成為面霸了面試官都得折服MySQL裡有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?Redis有哪些適合的場景?Redis支持的Java客戶端都有哪些?官方推薦用哪個?Redis和Redisson有什麼關係?Jedis與Redisson對比有什麼優缺點?
  • 我和面試官的博弈:Redis 篇
    今天,我面試了某大廠的java開發崗位,迎面走來一位風塵僕僕的中年男子,手裡拿著屏幕還亮著的mac,他衝著我禮貌的笑了笑,然後說了句「不好意思,讓你久等了」,然後示意我坐下,說:「我們開始吧。看了你的簡歷,覺得你對redis應該掌握的不錯,我們今天就來討論下redis......」。我想:「來就來,兵來將擋水來土掩」。
  • 騰訊三面終拿Offer,關於redis,高並發,分布式,微服務一鍵領取
    回來之後把這些題目做了一個分類並整理出答案(強迫症的我~狂補知識~)分為redis緩存,高並發,分布式,微服務等,接下來分享一下我的這騰訊面試的面經加上一些我的學習筆記。騰訊關於redis緩存面試真題:項目中緩存是如何使用的?為什麼要用緩存?緩存使用不當會造成什麼後果?redis 和 memcached 有什麼區別?redis 的線程模型是什麼?
  • 緩存架構技術:Redis+MongDB,阿里P7面試必跳的坑
    聽完我這小老弟的一番肺腑之言,這...緩存架構技術:Redis+MongDB,不就是阿里P7面試必跳的坑?跳不過去那就只能say godbye了,在坑裡「等死」呀...緊接著...吾日三省吾身,突然發現自己掌握的好像也不咋滴,不得不回家好好「補一補」。
  • Redis面試題
    本文圍繞以下幾點進行闡述1、為什麼使用redis2、使用redis有什麼缺點3、單線程的redis為什麼這麼快4、redis的數據類型,以及每種數據類型的使用場景5、redis的過期策略以及內存淘汰機制6、redis和資料庫雙寫一致性問題7、如何應對緩存穿透和緩存雪崩問題8、如何解決redis的並發競爭問題
  • 阿里架構師 8 問 Redis,你能答上幾個?
    中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據?AOF:將 redis 所執行過的所有指令都記錄下來,在下次 redis 重啟時,只需要執行指令就可以了):寫日誌。缺點:體積大,恢復速度慢。Redis4.0 之後有了混合持久化的功能,將 bgsave 的全量和 aof 的增量做了融合處理,這樣既保證了恢復的效率又兼顧了數據的安全性。