Redis常見(jiàn)的八道面試題

一、memcached與redis的區(qū)別鸳劳?

  1.存儲(chǔ)方式不同婚瓜。memcached把數(shù)據(jù)全部存在內(nèi)存之中宝鼓,斷電之后會(huì)掛掉,而redis雖然也用到了內(nèi)存巴刻,但是會(huì)有部分?jǐn)?shù)據(jù)存在硬盤(pán)中愚铡,保證數(shù)據(jù)持久性。

2.數(shù)據(jù)支持類型不同。memcached對(duì)數(shù)據(jù)支持比較簡(jiǎn)單沥寥,而redis支持?jǐn)?shù)據(jù)類型較豐富碍舍,如string、list邑雅、set片橡、sorted set、hash淮野。

  3.底層實(shí)現(xiàn)不同捧书。一般調(diào)用系統(tǒng)函數(shù),會(huì)消耗比較多的時(shí)間去請(qǐng)求骤星,redis自己構(gòu)建了vm经瓷,速度會(huì)更快。


二妈踊、redis數(shù)據(jù)的淘汰策略了嚎?

  1.volatile-lru:從已經(jīng)設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中泪漂,挑選最近最少使用的數(shù)據(jù)淘汰廊营。

  2.volatile-ttl:從已經(jīng)設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中,挑選即將要過(guò)期的數(shù)據(jù)淘汰萝勤。

  3.volatile-random:從已經(jīng)設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中露筒,隨機(jī)挑選數(shù)據(jù)淘汰。

  4.allkeys-lru:從所有的數(shù)據(jù)集中敌卓,挑選最近最少使用的數(shù)據(jù)淘汰慎式。

  5.allkeys-random:從所有的數(shù)據(jù)集中,隨機(jī)挑選數(shù)據(jù)淘汰趟径。

  6瘪吏。no-enviction:禁止淘汰數(shù)據(jù)。


三蜗巧、為什么redis把所有數(shù)據(jù)都放到內(nèi)存中掌眠?

redis為了達(dá)到最快的讀寫(xiě)速度,將數(shù)據(jù)都讀到內(nèi)存中幕屹,并通過(guò)異步的方式將數(shù)據(jù)寫(xiě)入磁盤(pán)蓝丙。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤(pán)IO速度會(huì)嚴(yán)重影響redis的性能望拖。


四渺尘、redis的并發(fā)競(jìng)爭(zhēng)問(wèn)題如何解決?

首先redis為單進(jìn)程單線程模式说敏,采用隊(duì)列模式將并發(fā)訪問(wèn)變?yōu)榇性L問(wèn)鸥跟。redis本身時(shí)沒(méi)有鎖的概念的,redis對(duì)多個(gè)客戶端連接并不存在競(jìng)爭(zhēng)盔沫,但是在Jedis客戶端對(duì)redis進(jìn)行并發(fā)訪問(wèn)時(shí)會(huì)產(chǎn)生一系列問(wèn)題医咨,這些問(wèn)題時(shí)由于客戶端連接混亂造成的蚂夕。有兩種方案解決。

  1.在客戶端腋逆,對(duì)連接進(jìn)行池化婿牍,同時(shí)對(duì)客戶端讀寫(xiě)redis操作采用內(nèi)部鎖synchronized。

  2.在服務(wù)器角度惩歉,利用setnx實(shí)現(xiàn)鎖等脂。


五、redis過(guò)期鍵的刪除策略撑蚌?

  1.定時(shí)刪除:在設(shè)置鍵的過(guò)期時(shí)間的同時(shí)上遥,創(chuàng)建一個(gè)timer,讓定時(shí)器在鍵的過(guò)期時(shí)間到達(dá)時(shí)争涌,立即執(zhí)行對(duì)鍵的刪除操作粉楚。(主動(dòng)刪除)

    對(duì)內(nèi)存友好,但是對(duì)cpu時(shí)間不友好亮垫,有較多過(guò)期鍵的而情況下模软,刪除過(guò)期鍵會(huì)占用相當(dāng)一部分cpu時(shí)間。

  2.惰性刪除:放任過(guò)期鍵不管饮潦,但是每次從鍵空間中獲取鍵時(shí)燃异,都檢查取到的鍵是否過(guò)去,如果過(guò)期就刪除继蜡,如果沒(méi)過(guò)期就返回該鍵回俐。(被動(dòng)刪除)

    對(duì)cpu時(shí)間友好,程序只會(huì)在取出鍵的時(shí)候才會(huì)對(duì)鍵進(jìn)行過(guò)期檢查稀并,這不會(huì)在刪除其他無(wú)關(guān)過(guò)期鍵上花費(fèi)任何cpu時(shí)間仅颇,但是如果一個(gè)鍵已經(jīng)過(guò)期,而這個(gè)鍵又保留在數(shù)據(jù)庫(kù)中碘举,那么只要這個(gè)過(guò)期鍵不被刪除忘瓦,他所占用的內(nèi)存就不會(huì)釋放,對(duì)內(nèi)存不友好殴俱。

  3.定期刪除:每隔一段時(shí)間就對(duì)數(shù)據(jù)庫(kù)進(jìn)行一次檢查政冻,刪除里面的過(guò)期鍵。(主動(dòng)刪除)

    采用對(duì)內(nèi)存和cpu時(shí)間折中的方法线欲,每個(gè)一段時(shí)間執(zhí)行一次刪除過(guò)期鍵操作明场,并通過(guò)限制操作執(zhí)行的時(shí)長(zhǎng)和頻率來(lái)減少對(duì)cpu時(shí)間的影響。難點(diǎn)在于李丰,選擇一個(gè)好的策略來(lái)設(shè)置刪除操作的時(shí)長(zhǎng)和執(zhí)行頻率苦锨。


六、redis與一般db的同步過(guò)程?

  有兩種方式舟舒。

第一種拉庶,先去redis中判斷數(shù)據(jù)是否存在,如果存在秃励,則直接返回緩存好的數(shù)據(jù)氏仗,如果不存在,去db中讀取數(shù)據(jù)夺鲜,并把數(shù)據(jù)緩存一份到redis中皆尔。適用與數(shù)據(jù)里比較大,但是不經(jīng)常更新的情況币励,如用戶排行慷蠕。

第二種,先去redis中判斷數(shù)據(jù)是否存在食呻,如果存在流炕,則直接更新對(duì)應(yīng)數(shù)據(jù)(這一步會(huì)記錄下更新的key,并把更新后的數(shù)據(jù)返回給頁(yè)面仅胞,如果不存在每辟,先去數(shù)據(jù)庫(kù)中更新內(nèi)容,然后把數(shù)據(jù)保存一份到redis中饼问。再往后影兽,后臺(tái)會(huì)進(jìn)行一系列操作揭斧,把redis中更新的key讀取出來(lái)莱革,找到數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù),并更新數(shù)據(jù)庫(kù)讹开。這種方式是把redis當(dāng)作數(shù)據(jù)庫(kù)使用盅视,適合大數(shù)據(jù)的頻繁變動(dòng)。但是對(duì)redis的依賴很大旦万,要做好掛掉之后的數(shù)據(jù)備份闹击。


七、簡(jiǎn)述redis的哨兵模式

  哨兵是對(duì)redis進(jìn)行實(shí)時(shí)的監(jiān)控成艘,主要有兩個(gè)功能赏半。

  1.監(jiān)測(cè)主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)是否正常運(yùn)行。2.當(dāng)主數(shù)據(jù)庫(kù)出現(xiàn)故障的時(shí)候淆两,可以自動(dòng)將一個(gè)從數(shù)據(jù)庫(kù)轉(zhuǎn)換為主數(shù)據(jù)庫(kù)断箫,實(shí)現(xiàn)自動(dòng)切換。


八秋冰、redis的哨兵的監(jiān)控機(jī)制是怎樣的仲义?

  哨兵監(jiān)控也是有集群的,會(huì)有多個(gè)哨兵進(jìn)行監(jiān)控,當(dāng)判斷發(fā)生故障的哨兵達(dá)到一定數(shù)量的時(shí)候才進(jìn)行修復(fù)埃撵。一個(gè)健壯的部署至少需要三個(gè)哨兵實(shí)例赵颅。

每個(gè)Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實(shí)例發(fā)送一個(gè) PING 命令

2.如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時(shí)間超過(guò) down-after-milliseconds 選項(xiàng)所指定的值暂刘, 則這個(gè)實(shí)例會(huì)被 Sentinel 標(biāo)記為主觀下線饺谬。

3.如果一個(gè)Master被標(biāo)記為主觀下線,則正在監(jiān)視這個(gè)Master的所有 Sentinel 要以每秒一次的頻率確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài)谣拣。

4.當(dāng)有足夠數(shù)量的 Sentinel(大于等于配置文件指定的值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài)商蕴, 則Master會(huì)被標(biāo)記為客觀下線

5.在一般情況下, 每個(gè) Sentinel 會(huì)以每 10 秒一次的頻率向它已知的所有Master芝发,Slave發(fā)送 INFO 命令

6.當(dāng)Master被 Sentinel 標(biāo)記為客觀下線時(shí)绪商,Sentinel 向下線的 Master 的所有 Slave 發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次

7.若沒(méi)有足夠數(shù)量的 Sentinel 同意 Master 已經(jīng)下線, Master 的客觀下線狀態(tài)就會(huì)被移除辅鲸。若 Master 重新向 Sentinel 的 PING 命令返回有效回復(fù)格郁, Master 的主觀下線狀態(tài)就會(huì)被移除。

擴(kuò)展閱讀

企業(yè)面試中關(guān)于MYSQL重點(diǎn)的28道面試題解答

Redis面試總結(jié)

Redis 分布式鎖:樂(lè)觀鎖的實(shí)現(xiàn)独悴,以秒殺系統(tǒng)為例

Nginx面試中最常見(jiàn)的18道題

面試必備之TCP常見(jiàn)知識(shí)點(diǎn)整理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末例书,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子刻炒,更是在濱河造成了極大的恐慌决采,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坟奥,死亡現(xiàn)場(chǎng)離奇詭異树瞭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)爱谁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)晒喷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宿接,“玉大人链快,你說(shuō)我怎么就攤上這事⊥背梗” “怎么了寺旺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵爷抓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阻塑,道長(zhǎng)蓝撇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任叮姑,我火速辦了婚禮唉地,結(jié)果婚禮上据悔,老公的妹妹穿的比我還像新娘。我一直安慰自己耘沼,他們只是感情好极颓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著群嗤,像睡著了一般菠隆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狂秘,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天骇径,我揣著相機(jī)與錄音,去河邊找鬼者春。 笑死破衔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钱烟。 我是一名探鬼主播晰筛,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拴袭!你這毒婦竟也來(lái)了读第?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拥刻,失蹤者是張志新(化名)和其女友劉穎怜瞒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體般哼,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吴汪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逝她。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浇坐。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖黔宛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擒贸,我是刑警寧澤臀晃,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站介劫,受9級(jí)特大地震影響徽惋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜座韵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一险绘、第九天 我趴在偏房一處隱蔽的房頂上張望踢京。 院中可真熱鬧,春花似錦宦棺、人聲如沸瓣距。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹈丸。三九已至,卻和暖如春呐芥,著一層夾襖步出監(jiān)牢的瞬間逻杖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工思瘟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荸百,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓滨攻,卻偏偏與公主長(zhǎng)得像管搪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铡买,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 標(biāo)簽: redis 緩存 主從 哨兵 集群 本文簡(jiǎn)單的介紹redis三種模式在linux的安裝部署和數(shù)據(jù)存儲(chǔ)的總結(jié)...
    luhanlin閱讀 4,329評(píng)論 0 5
  • . 簡(jiǎn)述: Redis由Salvatore Sanfilippo使用C語(yǔ)言編寫(xiě)的一種支持網(wǎng)絡(luò)更鲁、可基于內(nèi)存亦可持久化...
    zhglance閱讀 501評(píng)論 0 3
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)奇钞,如redis澡为,volde...
    MicoCube閱讀 3,981評(píng)論 2 27
  • 一. 數(shù)據(jù)結(jié)構(gòu) 我們知道redis有5種基本類型:string、list景埃、hash媒至、set、zset谷徙,我們來(lái)看一下...
    漂泊的胡蘿卜閱讀 628評(píng)論 1 0
  • 煩拒啰,煩透了。 對(duì)一個(gè)人好太久便會(huì)成理所當(dāng)然完慧。他們哪里來(lái)的自信我想說(shuō)谋旦? 無(wú)語(yǔ),奇葩屈尼!夠了册着!
    一個(gè)瘋狂的小釹子閱讀 188評(píng)論 0 0