Redis面試刁難大全


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

字符串String、字典Hash阻逮、列表List粱快、集合Set、有序集合SortedSet夺鲜。

如果你是Redis中高級(jí)用戶皆尔,還需要加上下面幾種數(shù)據(jù)結(jié)構(gòu)HyperLogLog呐舔、Geo币励、Pub/Sub。

如果你說還玩過Redis Module珊拼,像BloomFilter食呻,RedisSearch,Redis-ML澎现,面試官得眼睛就開始發(fā)亮了仅胞。

使用過Redis分布式鎖么,它是什么回事剑辫?

先拿setnx來爭(zhēng)搶鎖干旧,搶到之后,再用expire給鎖加一個(gè)過期時(shí)間防止鎖忘記了釋放妹蔽。

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

這時(shí)候你要給予驚訝的反饋:唉编整,是喔,這個(gè)鎖就永遠(yuǎn)得不到釋放了乳丰。緊接著你需要抓一抓自己得腦袋掌测,故作思考片刻,好像接下來的結(jié)果是你主動(dòng)思考出來的产园,然后回答:我記得set指令有非常復(fù)雜的參數(shù)汞斧,這個(gè)應(yīng)該是可以同時(shí)把setnx和expire合成一條指令來用的夜郁!對(duì)方這時(shí)會(huì)顯露笑容,心里開始默念:摁断箫,這小子還不錯(cuò)拂酣。

假如Redis里面有1億個(gè)key,其中有10w個(gè)key是以某個(gè)固定的已知的前綴開頭的仲义,如果將它們?nèi)空页鰜恚?/h2>

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

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

這個(gè)時(shí)候你要回答redis關(guān)鍵的一個(gè)特性:redis的單線程的赵颅。keys指令會(huì)導(dǎo)致線程阻塞一段時(shí)間,線上服務(wù)會(huì)停頓暂刘,直到指令執(zhí)行完畢饺谬,服務(wù)才能恢復(fù)。這個(gè)時(shí)候可以使用scan指令谣拣,scan指令可以無阻塞的提取出指定模式的key列表募寨,但是會(huì)有一定的重復(fù)概率,在客戶端做一次去重就可以了森缠,但是整體所花費(fèi)的時(shí)間會(huì)比直接用keys指令長(zhǎng)拔鹰。

使用過Redis做異步隊(duì)列么,你是怎么用的贵涵?

一般使用list結(jié)構(gòu)作為隊(duì)列列肢,rpush生產(chǎn)消息,lpop消費(fèi)消息宾茂。當(dāng)lpop沒有消息的時(shí)候瓷马,要適當(dāng)sleep一會(huì)再重試。

如果對(duì)方追問可不可以不用sleep呢跨晴?list還有個(gè)指令叫blpop欧聘,在沒有消息的時(shí)候,它會(huì)阻塞住直到消息到來端盆。

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

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

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

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

如果有大量的key需要設(shè)置同一時(shí)間過期迈窟,一般需要注意什么?

如果大量的key過期時(shí)間設(shè)置的過于集中忌栅,到過期的那個(gè)時(shí)間點(diǎn)车酣,redis可能會(huì)出現(xiàn)短暫的卡頓現(xiàn)象。一般需要在時(shí)間上加一個(gè)隨機(jī)值索绪,使得過期時(shí)間分散一些湖员。

Redis如何做持久化的?

bgsave做鏡像全量持久化瑞驱,aof做增量持久化娘摔。因?yàn)閎gsave會(huì)耗費(fèi)較長(zhǎng)時(shí)間,不夠?qū)崟r(shí)钱烟,在停機(jī)的時(shí)候會(huì)導(dǎo)致大量丟失數(shù)據(jù)晰筛,所以需要aof來配合使用嫡丙。在redis實(shí)例重啟時(shí)拴袭,會(huì)使用bgsave持久化文件重新構(gòu)建內(nèi)存,再使用aof重放近期的操作指令來實(shí)現(xiàn)完整恢復(fù)重啟之前的狀態(tài)曙博。

對(duì)方追問那如果突然機(jī)器掉電會(huì)怎樣拥刻?取決于aof日志sync屬性的配置,如果不要求性能父泳,在每條寫指令時(shí)都sync一下磁盤般哼,就不會(huì)丟失數(shù)據(jù)。但是在高性能的要求下每次都sync是不現(xiàn)實(shí)的惠窄,一般都使用定時(shí)sync蒸眠,比如1s1次,這個(gè)時(shí)候最多就會(huì)丟失1s的數(shù)據(jù)杆融。

對(duì)方追問bgsave的原理是什么楞卡?你給出兩個(gè)詞匯就可以了,fork和cow。fork是指redis通過創(chuàng)建子進(jìn)程來進(jìn)行bgsave操作蒋腮,cow指的是copy on write淘捡,子進(jìn)程創(chuàng)建后,父子進(jìn)程共享數(shù)據(jù)段池摧,父進(jìn)程繼續(xù)提供讀寫服務(wù)焦除,寫臟的頁(yè)面數(shù)據(jù)會(huì)逐漸和子進(jìn)程分離開來。

Pipeline有什么好處作彤,為什么要用pipeline膘魄?

可以將多次IO往返的時(shí)間縮減為一次,前提是pipeline執(zhí)行的指令之間沒有因果相關(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)行重放就完成了同步過程。

是否使用過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閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菇晃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚓挤,警方通過查閱死者的電腦和手機(jī)磺送,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門剩失,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人册着,你說我怎么就攤上這事拴孤。” “怎么了甲捏?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵演熟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我司顿,道長(zhǎng)芒粹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任大溜,我火速辦了婚禮化漆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钦奋。我一直安慰自己座云,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布付材。 她就那樣靜靜地躺著朦拖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厌衔。 梳的紋絲不亂的頭發(fā)上璧帝,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音富寿,去河邊找鬼睬隶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛页徐,可吹牛的內(nèi)容都是我干的苏潜。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼泞坦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窖贤!你這毒婦竟也來了砖顷?” 一聲冷哼從身側(cè)響起贰锁,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滤蝠,沒想到半個(gè)月后豌熄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡物咳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年锣险,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芯肤,死狀恐怖巷折,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崖咨,我是刑警寧澤锻拘,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站击蹲,受9級(jí)特大地震影響署拟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歌豺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一推穷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧类咧,春花似錦馒铃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至血巍,卻和暖如春萧锉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背述寡。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工柿隙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鲫凶。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓禀崖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親螟炫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子波附,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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

  • 1、什么是Redis昼钻? Redis本質(zhì)上是一個(gè)Key-Value類型的內(nèi)存數(shù)據(jù)庫(kù)掸屡,很像memcached,整個(gè)數(shù)據(jù)...
    夜風(fēng)月圓閱讀 2,214評(píng)論 0 23
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記然评,整理的知識(shí)點(diǎn)仅财,也是為了防止忘記,尊重勞動(dòng)成果碗淌,轉(zhuǎn)載注明出處哦盏求!如果你也喜歡抖锥,那...
    波波波先森閱讀 3,435評(píng)論 0 40
  • 今天在杭州參加校長(zhǎng)培訓(xùn)認(rèn)識(shí)了一群五湖四海的朋友學(xué)到了很多東西收益匪淺
    山東劉老師閱讀 396評(píng)論 2 2
  • 一、基本知識(shí) 1.作者 Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)器碎罚,也是一個(gè)IMAP...
    程序員啊粥閱讀 3,163評(píng)論 0 6
  • 金句一:每個(gè)人要為自己所作所為負(fù)責(zé)磅废。 應(yīng)用:推薦中式做法,嘴上推卸荆烈,心里反省还蹲,則情緒穩(wěn)定。 為什么耙考?嘴上承認(rèn)谜喊,會(huì)讓...
    邢慧宇閱讀 296評(píng)論 0 0