10個(gè)常見(jiàn)的Redis面試問(wèn)題

Redis有哪些數(shù)據(jù)結(jié)構(gòu)?

字符串String椅野、字典Hash终畅、列表List、集合Set竟闪、有序集合SortedSet离福。

如果你是Redis中高級(jí)用戶(hù),還需要加上下面幾種數(shù)據(jù)結(jié)構(gòu)HyperLogLog炼蛤、Geo妖爷、Pub/Sub。

如果你說(shuō)還玩過(guò)Redis Module鲸湃,像BloomFilter赠涮,RedisSearch子寓,Redis-ML暗挑,面試官得眼睛就開(kāi)始發(fā)亮了。

使用過(guò)Redis分布式鎖么斜友,它是什么回事炸裆?

先拿setnx來(lái)爭(zhēng)搶鎖,搶到之后鲜屏,再用expire給鎖加一個(gè)過(guò)期時(shí)間防止鎖忘記了釋放烹看。

這時(shí)候?qū)Ψ綍?huì)告訴你說(shuō)你回答得不錯(cuò)国拇,然后接著問(wèn)如果在setnx之后執(zhí)行expire之前進(jìn)程意外crash或者要重啟維護(hù)了,那會(huì)怎么樣惯殊?

這時(shí)候你要給予驚訝的反饋:唉酱吝,是喔,這個(gè)鎖就永遠(yuǎn)得不到釋放了土思。緊接著你需要抓一抓自己得腦袋务热,故作思考片刻,好像接下來(lái)的結(jié)果是你主動(dòng)思考出來(lái)的己儒,然后回答:我記得set指令有非常復(fù)雜的參數(shù)崎岂,這個(gè)應(yīng)該是可以同時(shí)把setnx和expire合成一條指令來(lái)用的!對(duì)方這時(shí)會(huì)顯露笑容闪湾,心里開(kāi)始默念:摁冲甘,這小子還不錯(cuò)。

假如Redis里面有1億個(gè)key途样,其中有10w個(gè)key是以某個(gè)固定的已知的前綴開(kāi)頭的江醇,如果將它們?nèi)空页鰜?lái)?

使用keys指令可以掃出指定模式的key列表娘纷。

對(duì)方接著追問(wèn):如果這個(gè)redis正在給線上的業(yè)務(wù)提供服務(wù)嫁审,那使用keys指令會(huì)有什么問(wèn)題?

這個(gè)時(shí)候你要回答redis關(guān)鍵的一個(gè)特性:redis的單線程的赖晶。keys指令會(huì)導(dǎo)致線程阻塞一段時(shí)間律适,線上服務(wù)會(huì)停頓,直到指令執(zhí)行完畢遏插,服務(wù)才能恢復(fù)捂贿。這個(gè)時(shí)候可以使用scan指令,scan指令可以無(wú)阻塞的提取出指定模式的key列表胳嘲,但是會(huì)有一定的重復(fù)概率厂僧,在客戶(hù)端做一次去重就可以了,但是整體所花費(fèi)的時(shí)間會(huì)比直接用keys指令長(zhǎng)了牛。

使用過(guò)Redis做異步隊(duì)列么颜屠,你是怎么用的?

一般使用list結(jié)構(gòu)作為隊(duì)列鹰祸,rpush生產(chǎn)消息甫窟,lpop消費(fèi)消息。當(dāng)lpop沒(méi)有消息的時(shí)候蛙婴,要適當(dāng)sleep一會(huì)再重試粗井。

如果對(duì)方追問(wèn)可不可以不用sleep呢?list還有個(gè)指令叫blpop,在沒(méi)有消息的時(shí)候浇衬,它會(huì)阻塞住直到消息到來(lái)懒构。

如果對(duì)方追問(wèn)能不能生產(chǎn)一次消費(fèi)多次呢?使用pub/sub主題訂閱者模式耘擂,可以實(shí)現(xiàn)1:N的消息隊(duì)列胆剧。

如果對(duì)方追問(wèn)pub/sub有什么缺點(diǎn)?在消費(fèi)者下線的情況下醉冤,生產(chǎn)的消息會(huì)丟失赞赖,得使用專(zhuān)業(yè)的消息隊(duì)列如rabbitmq等。

如果對(duì)方追問(wèn)redis如何實(shí)現(xiàn)延時(shí)隊(duì)列冤灾?我估計(jì)現(xiàn)在你很想把面試官一棒打死如果你手上有一根棒球棍的話前域,怎么問(wèn)的這么詳細(xì)。但是你很克制韵吨,然后神態(tài)自若的回答道:使用sortedset匿垄,拿時(shí)間戳作為score,消息內(nèi)容作為key調(diào)用zadd來(lái)生產(chǎn)消息归粉,消費(fèi)者用zrangebyscore指令獲取N秒之前的數(shù)據(jù)輪詢(xún)進(jìn)行處理椿疗。

到這里,面試官暗地里已經(jīng)對(duì)你豎起了大拇指糠悼。但是他不知道的是此刻你卻豎起了中指届榄,在椅子背后。

如果有大量的key需要設(shè)置同一時(shí)間過(guò)期倔喂,一般需要注意什么铝条?

如果大量的key過(guò)期時(shí)間設(shè)置的過(guò)于集中,到過(guò)期的那個(gè)時(shí)間點(diǎn)席噩,redis可能會(huì)出現(xiàn)短暫的卡頓現(xiàn)象班缰。一般需要在時(shí)間上加一個(gè)隨機(jī)值,使得過(guò)期時(shí)間分散一些悼枢。

Redis如何做持久化的埠忘?

bgsave做鏡像全量持久化,aof做增量持久化馒索。因?yàn)閎gsave會(huì)耗費(fèi)較長(zhǎng)時(shí)間莹妒,不夠?qū)崟r(shí),在停機(jī)的時(shí)候會(huì)導(dǎo)致大量丟失數(shù)據(jù)绰上,所以需要aof來(lái)配合使用旨怠。在redis實(shí)例重啟時(shí)软舌,優(yōu)先使用aof來(lái)恢復(fù)內(nèi)存的狀態(tài),如果沒(méi)有aof日志贮预,就會(huì)使用rdb文件來(lái)恢復(fù)薯酝。

如果再問(wèn)aof文件過(guò)大恢復(fù)時(shí)間過(guò)長(zhǎng)怎么辦困鸥?你告訴面試官虏辫,Redis會(huì)定期做aof重寫(xiě)疤苹,壓縮aof文件日志大小赶舆。如果面試官不夠滿(mǎn)意信峻,再拿出殺手锏答案倦青,Redis4.0之后有了混合持久化的功能,將bgsave的全量和aof的增量做了融合處理盹舞,這樣既保證了恢復(fù)的效率又兼顧了數(shù)據(jù)的安全性产镐。這個(gè)功能甚至很多面試官都不知道,他們肯定會(huì)對(duì)你刮目相看踢步。

如果對(duì)方追問(wèn)那如果突然機(jī)器掉電會(huì)怎樣癣亚?取決于aof日志sync屬性的配置,如果不要求性能获印,在每條寫(xiě)指令時(shí)都sync一下磁盤(pán)述雾,就不會(huì)丟失數(shù)據(jù)。但是在高性能的要求下每次都sync是不現(xiàn)實(shí)的兼丰,一般都使用定時(shí)sync玻孟,比如1s1次,這個(gè)時(shí)候最多就會(huì)丟失1s的數(shù)據(jù)鳍征。

Pipeline有什么好處黍翎,為什么要用pipeline?

可以將多次IO往返的時(shí)間縮減為一次艳丛,前提是pipeline執(zhí)行的指令之間沒(méi)有因果相關(guān)性匣掸。使用redis-benchmark進(jìn)行壓測(cè)的時(shí)候可以發(fā)現(xiàn)影響redis的QPS峰值的一個(gè)重要因素是pipeline批次指令的數(shù)目。

Redis的同步機(jī)制了解么氮双?

Redis可以使用主從同步旺聚,從從同步。第一次同步時(shí)眶蕉,主節(jié)點(diǎn)做一次bgsave砰粹,并同時(shí)將后續(xù)修改操作記錄到內(nèi)存buffer,待完成后將rdb文件全量同步到復(fù)制節(jié)點(diǎn)造挽,復(fù)制節(jié)點(diǎn)接受完成后將rdb鏡像加載到內(nèi)存碱璃。加載完成后,再通知主節(jié)點(diǎn)將期間修改的操作記錄同步到復(fù)制節(jié)點(diǎn)進(jìn)行重放就完成了同步過(guò)程饭入。

是否使用過(guò)Redis集群嵌器,集群的原理是什么?

Redis Sentinal著眼于高可用谐丢,在master宕機(jī)時(shí)會(huì)自動(dòng)將slave提升為master爽航,繼續(xù)提供服務(wù)蚓让。

Redis Cluster著眼于擴(kuò)展性,在單個(gè)redis內(nèi)存不足時(shí)讥珍,使用Cluster進(jìn)行分片存儲(chǔ)历极。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衷佃,隨后出現(xiàn)的幾起案子趟卸,更是在濱河造成了極大的恐慌,老刑警劉巖氏义,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锄列,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惯悠,警方通過(guò)查閱死者的電腦和手機(jī)邻邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)克婶,“玉大人饶囚,你說(shuō)我怎么就攤上這事○梗” “怎么了萝风?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)紫岩。 經(jīng)常有香客問(wèn)我规惰,道長(zhǎng),這世上最難降的妖魔是什么泉蝌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任歇万,我火速辦了婚禮,結(jié)果婚禮上勋陪,老公的妹妹穿的比我還像新娘贪磺。我一直安慰自己,他們只是感情好诅愚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布寒锚。 她就那樣靜靜地躺著,像睡著了一般违孝。 火紅的嫁衣襯著肌膚如雪刹前。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天雌桑,我揣著相機(jī)與錄音喇喉,去河邊找鬼。 笑死校坑,一個(gè)胖子當(dāng)著我的面吹牛拣技,可吹牛的內(nèi)容都是我干的千诬。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼膏斤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徐绑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掸绞,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耕捞,沒(méi)想到半個(gè)月后衔掸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俺抽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年敞映,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷斧。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡振愿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弛饭,到底是詐尸還是另有隱情冕末,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布侣颂,位于F島的核電站档桃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏憔晒。R本人自食惡果不足惜藻肄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拒担。 院中可真熱鬧嘹屯,春花似錦、人聲如沸从撼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)低零。三九已至呆馁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毁兆,已是汗流浹背浙滤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留气堕,地道東北人纺腊。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓畔咧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揖膜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子誓沸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 導(dǎo)讀:在程序員面試過(guò)程中Redis相關(guān)的知識(shí)是常被問(wèn)到的話題。作為一名在互聯(lián)網(wǎng)技術(shù)行業(yè)打擊過(guò)成百上千名的資深技術(shù)面...
    java架構(gòu)_Zhang閱讀 1,738評(píng)論 2 3
  • 導(dǎo)讀:在程序員面試過(guò)程中Redis相關(guān)的知識(shí)是常被問(wèn)到的話題壹粟。作為一名在互聯(lián)網(wǎng)技術(shù)行業(yè)打擊過(guò)成百上千名的資深技術(shù)面...
    小刀愛(ài)編程閱讀 720評(píng)論 0 3
  • 使用緩存是系統(tǒng)性能優(yōu)化的第一黃金法則拜隧。 緩存的設(shè)計(jì)和使用對(duì)一個(gè)系統(tǒng)的性能至關(guān)重要,平時(shí)接觸到項(xiàng)目無(wú)論多少也都會(huì)在某...
    刀刃丿閱讀 1,333評(píng)論 0 6
  • 本文精心整理了書(shū)籍趁仙、博客以及本人面試中遇到的基礎(chǔ)知識(shí)點(diǎn)洪添,方便大家快速回顧知識(shí)。 參考: https://githu...
    蠻三刀醬閱讀 881評(píng)論 0 4
  • 我們總是帶著懷疑的態(tài)度踩踏著時(shí)間慘淡而活雀费。過(guò)去為什么抹不去干奢?如今為何百無(wú)聊賴(lài)?未來(lái)又會(huì)是怎樣遙不可及盏袄? 沒(méi)人能回答...
    MOKI司兒閱讀 250評(píng)論 0 0