【面試】redis面試集錦

1. 使用 Redis有哪些好處?

  • 速度快胀滚,因為數(shù)據(jù)存在內(nèi)存中趟济,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1)

  • 支持豐富數(shù)據(jù)類型咽笼,支持string顷编,list,set剑刑,sorted set媳纬,hash

  • 支持事務(wù),操作都是原子性施掏,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行钮惠,要么全部不執(zhí)行

  • 豐富的特性:可用于緩存,消息七芭,按key設(shè)置過期時間素挽,過期后將會自動刪除

2. redis相比memcached有哪些優(yōu)勢?

  • memcached所有的值均是簡單的字符串狸驳,redis作為其替代者预明,支持更為豐富的數(shù)據(jù)類型

  • redis的速度比memcached快很多

  • redis可以持久化其數(shù)據(jù)

3. redis常見性能問題和解決方案:

  • Master最好不要做任何持久化工作,如RDB內(nèi)存快照和AOF日志文件

  • 如果數(shù)據(jù)比較重要锌历,某個Slave開啟AOF備份數(shù)據(jù)贮庞,策略設(shè)置為每秒同步一次

  • 為了主從復(fù)制的速度和連接的穩(wěn)定性峦筒,Master和Slave最好在同一個局域網(wǎng)內(nèi)

  • 盡量避免在壓力很大的主庫上增加從庫

  • 主從復(fù)制不要用圖狀結(jié)構(gòu)究西,用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master <- Slave1 <- Slave2 <- Slave3...
    這樣的結(jié)構(gòu)方便解決單點(diǎn)故障問題物喷,實現(xiàn)Slave對Master的替換卤材。如果Master掛了,可以立刻啟用Slave1做Master峦失,其他不變扇丛。

4. MySQL里有2000w數(shù)據(jù),redis中只存20w的數(shù)據(jù)尉辑,如何保證redis中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)

相關(guān)知識:redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時候帆精,就會施行數(shù)據(jù)淘汰策略。redis 提供 6種數(shù)據(jù)淘汰策略:

  • voltile-lru:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰
  • volatile-ttl:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過期的數(shù)據(jù)淘汰
  • volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中任意選擇數(shù)據(jù)淘汰
  • allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰
  • allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰
  • no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

5. Memcache與Redis的區(qū)別都有哪些?

  • 存儲方式

Memecache把數(shù)據(jù)全部存在內(nèi)存之中卓练,斷電后會掛掉隘蝎,數(shù)據(jù)不能超過內(nèi)存大小。
Redis有部份存在硬盤上襟企,這樣能保證數(shù)據(jù)的持久性嘱么。

  • 數(shù)據(jù)支持類型

Memcache對數(shù)據(jù)類型支持相對簡單。
Redis有復(fù)雜的數(shù)據(jù)類型顽悼。

  • 使用底層模型不同

它們之間底層實現(xiàn)方式 以及與客戶端之間通信的應(yīng)用協(xié)議不一樣曼振。
Redis直接自己構(gòu)建了VM 機(jī)制 ,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話蔚龙,會浪費(fèi)一定的時間去移動和請求冰评。

  • value大小

redis最大可以達(dá)到1GB,而memcache只有1MB

6. Redis 常見的性能問題都有哪些木羹?如何解決集索?

  • Master寫內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會阻塞主線程的工作裹纳,當(dāng)快照比較大時對性能影響是非常大的暴区,會間斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照函匕。

  • Master AOF持久化,如果不重寫AOF文件蚪黑,這個持久化方式對性能的影響是最小的盅惜,但是AOF文件會不斷增大,AOF文件過大會影響Master重啟的恢復(fù)速度忌穿。Master最好不要做任何持久化工作抒寂,包括內(nèi)存快照和AOF日志文件,特別是不要啟用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵掠剑,某個Slave開啟AOF備份數(shù)據(jù)屈芜,策略為每秒同步一次。

  • Master調(diào)用BGREWRITEAOF重寫AOF文件朴译,AOF在重寫的時候會占大量的CPU和內(nèi)存資源井佑,導(dǎo)致服務(wù)load過高,出現(xiàn)短暫服務(wù)暫兔呤伲現(xiàn)象躬翁。

  • Redis主從復(fù)制的性能問題,為了主從復(fù)制的速度和連接的穩(wěn)定性盯拱,Slave和Master最好在同一個局域網(wǎng)內(nèi)

7, redis 最適合的場景

Redis最適合所有數(shù)據(jù)in-momory的場景盒发,雖然Redis也提供持久化功能例嘱,但實際更多的是一個disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別宁舰,那么可能大家就會有疑問蝶防,似乎Redis更像一個加強(qiáng)版的Memcached,那么何時使用Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區(qū)別明吩,大多數(shù)都會得到以下觀點(diǎn):

  • Redis支持?jǐn)?shù)據(jù)的備份仍律,即master-slave模式的數(shù)據(jù)備份嘿悬。
  • Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中水泉,重啟的時候可以再次加載進(jìn)行使用善涨。
  • 會話緩存(Session Cache)
    最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優(yōu)勢在于:Redis提供持久化草则。當(dāng)維護(hù)一個不是嚴(yán)格要求一致性的緩存時钢拧,如果用戶的購物車信息全部丟失,大部分人都會不高興的炕横,現(xiàn)在源内,他們還會這樣嗎?
    幸運(yùn)的是份殿,隨著 Redis 這些年的改進(jìn)膜钓,很容易找到怎么恰當(dāng)?shù)氖褂肦edis來緩存會話的文檔。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件卿嘲。
  • 全頁緩存(FPC)
    除基本的會話token之外颂斜,Redis還提供很簡便的FPC平臺∈霸妫回到一致性問題沃疮,即使重啟了Redis實例,因為有磁盤的持久化放前,用戶也不會看到頁面加載速度的下降忿磅,這是一個極大改進(jìn)糯彬,類似 PHP本地FPC凭语。
    再次以Magento為例,Magento提供一個插件來使用Redis作為 全頁緩存后端撩扒。
    此外似扔,對WordPress的用戶來說吨些,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面炒辉。
  • 隊列
    Reids在內(nèi)存存儲引擎領(lǐng)域的一大優(yōu)點(diǎn)是提供 list 和 set 操作豪墅,這使得Redis能作為一個很好的消息隊列平臺來使用。Redis作為隊列使用的操作黔寇,就類似于本地程序語言(如 Python)對 list 的 push/pop 操作偶器。
    如果你快速的在Google中搜索“Redis queues”,你馬上就能找到大量的開源項目缝裤,這些項目的目的就是利用Redis創(chuàng)建非常好的后端工具屏轰,以滿足各種隊列需求。例如憋飞,Celery有一個后臺就是使用Redis作為broker霎苗,你可以從 這里去查看。
  • 排行榜/計數(shù)器
    Redis在內(nèi)存中對數(shù)字進(jìn)行遞增或遞減的操作實現(xiàn)的非常好榛做。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單唁盏,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)。所以检眯,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為“user_scores”厘擂,我們只需要像下面一樣執(zhí)行即可:
    當(dāng)然,這是假定你是根據(jù)你用戶的分?jǐn)?shù)做遞增的排序锰瘸。如果你想返回用戶及用戶的分?jǐn)?shù)驴党,你需要這樣執(zhí)行:
    ZRANGE user_scores 0 10 WITHSCORES
    Agora Games就是一個很好的例子,用Ruby實現(xiàn)的获茬,它的排行榜就是使用Redis來存儲數(shù)據(jù)的港庄,你可以在 這里看到。
  • 發(fā)布/訂閱
    最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能恕曲。發(fā)布/訂閱的使用場景確實非常多鹏氧。我已看見人們在社交網(wǎng)絡(luò)連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器佩谣,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)0鸦埂(不,這是真的茸俭,你可以去核實)吊履。
    Redis提供的所有特性中,我感覺這個是喜歡的人最少的一個调鬓,雖然它為用戶提供如果此多功能艇炎。

原文鏈接:http://www.cnblogs.com/goody9807/p/6485107.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腾窝,隨后出現(xiàn)的幾起案子缀踪,更是在濱河造成了極大的恐慌居砖,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驴娃,死亡現(xiàn)場離奇詭異奏候,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唇敞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門蔗草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疆柔,你說我怎么就攤上這事蕉世。” “怎么了婆硬?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵狠轻,是天一觀的道長。 經(jīng)常有香客問我彬犯,道長向楼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任谐区,我火速辦了婚禮湖蜕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宋列。我一直安慰自己昭抒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布炼杖。 她就那樣靜靜地躺著灭返,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坤邪。 梳的紋絲不亂的頭發(fā)上熙含,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音艇纺,去河邊找鬼怎静。 笑死,一個胖子當(dāng)著我的面吹牛黔衡,可吹牛的內(nèi)容都是我干的蚓聘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼盟劫,長吁一口氣:“原來是場噩夢啊……” “哼夜牡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捞高,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氯材,失蹤者是張志新(化名)和其女友劉穎渣锦,沒想到半個月后硝岗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氢哮,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年型檀,在試婚紗的時候發(fā)現(xiàn)自己被綠了冗尤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胀溺,死狀恐怖裂七,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仓坞,我是刑警寧澤背零,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站无埃,受9級特大地震影響徙瓶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫉称,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一侦镇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧织阅,春花似錦壳繁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至润樱,卻和暖如春剩胁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祥国。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工昵观, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舌稀。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓啊犬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壁查。 傳聞我的和親對象是個殘疾皇子觉至,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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

  • 轉(zhuǎn)載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,444評論 0 82
  • 1.1 資料 ,最好的入門小冊子睡腿,可以先于一切文檔之前看语御,免費(fèi)峻贮。 作者Antirez的博客,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,034評論 1 51
  • 本文將從Redis的基本特性入手,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進(jìn)行直觀介紹碉纺。之后概...
    kelgon閱讀 61,130評論 23 626
  • Redis雜談 Redis是近年來發(fā)展迅速的內(nèi)存數(shù)據(jù)庫船万,網(wǎng)上也已經(jīng)有多Redis的文章。但不管是英文還是中文骨田,多數(shù)...
    迷失于重逢閱讀 1,536評論 0 14
  • 這一年多耿导,我對燒菜有了一些興趣,從剛開始只會用電飯煲煮個飯态贤,又或者會下碗面條的我舱呻,到現(xiàn)在我還能有幾個拿手菜,這樣會...
    飛天球球閱讀 147評論 0 2