Redis面試題及答案_第1頁(yè)
Redis面試題及答案_第2頁(yè)
Redis面試題及答案_第3頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Redis是一個(gè)基丁內(nèi)存的高性能key-value數(shù)據(jù)庫(kù)。(有空再補(bǔ)充,有理解錯(cuò)誤或不足歡迎指正)Reids的特點(diǎn)Redis本質(zhì)上是一個(gè)Key-Value類型的內(nèi)存數(shù)據(jù)庫(kù),很像memcached整個(gè)數(shù)據(jù)庫(kù)統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù)flush到硬盤上進(jìn)行保存。因?yàn)槭羌儍?nèi)存操作,Redis的性能非常出色,每秒可以處理超過10萬次讀寫操作,是已知性能最快的Key-ValueDB。Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個(gè)value的最大限制是1GB不像memcached只能保存1MB勺數(shù)據(jù),因此Redis可以用來實(shí)現(xiàn)很多有用的

2、功能,比方說用他的List來做FIF。雙向鏈表,實(shí)現(xiàn)一個(gè)輕量級(jí)的高性能消息隊(duì)列服務(wù),用他的Set可以做高性能的tag系統(tǒng)等等。另外Redis也可以對(duì)存入的Key-Value設(shè)置expire時(shí)間,因此也可以被當(dāng)作一個(gè)功能加強(qiáng)版的memcache昧用。Redis的主要缺點(diǎn)是數(shù)據(jù)庫(kù)容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,因此Redis適合的場(chǎng)景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。Redis支持的數(shù)據(jù)類型Redis通過Key-Value的單值不同類型來區(qū)分,以下是支持的類型:StringsListsSets求交集、并集SortedSethashes為什么redis需要把所有數(shù)據(jù)放到

3、內(nèi)存中?Redis為了達(dá)到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過異步的方式將數(shù)據(jù)寫入磁盤。所以redis具有快速和數(shù)據(jù)持久化的特征。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤I/O速度為嚴(yán)重影響redis的性能。在內(nèi)存越來越便宜的今天,redis將會(huì)越來越受歡迎。如果設(shè)置了最大使用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達(dá)到內(nèi)存限值后不能繼續(xù)插入新值。Redis是單進(jìn)程單線程的redis利用隊(duì)列技術(shù)將并發(fā)訪問變?yōu)樯晷性L問,消除了傳統(tǒng)數(shù)據(jù)庫(kù)申行控制的開銷虛擬內(nèi)存當(dāng)你的key很小而value很大時(shí),使用VM的效果會(huì)比較好.因?yàn)檫@樣節(jié)約的內(nèi)存比較大.當(dāng)你的key不小時(shí),可以考慮使用一些非常方法將很大的key變成很大的value

4、,比如你可以考慮將key,value組合成一個(gè)新的value.vm-max-threads這個(gè)參數(shù),可以設(shè)置訪問swap文件的線程數(shù),設(shè)置最好不要超過機(jī)器的核數(shù),如果設(shè)置為0,那么所有對(duì)swap文件的操作都是申行的.可能會(huì)造成比較長(zhǎng)時(shí)間的延遲,但是對(duì)數(shù)據(jù)完整性有很好的保證.自己測(cè)試的時(shí)候發(fā)現(xiàn)用虛擬內(nèi)存性能也不錯(cuò)。如果數(shù)據(jù)量很大,可以考慮分布式或者其他數(shù)據(jù)庫(kù)分布式redis支持主從的模式。原則:Master會(huì)將數(shù)據(jù)同步到slave,而slave不會(huì)將數(shù)據(jù)同步到master0Slave啟動(dòng)時(shí)會(huì)連接master來同步數(shù)據(jù)。這是一個(gè)典型的分布式讀寫分離模型。我們可以利用master來插入數(shù)據(jù),slav

5、e提供檢索服務(wù)。這樣可以有效減少單個(gè)機(jī)器的并發(fā)訪問數(shù)量。讀寫分離模型通過增加SlaveDB的數(shù)量,讀的性能可以線性增長(zhǎng)。為了避免MasterDB的單點(diǎn)故障,集群一般都會(huì)采用兩臺(tái)MasterDB做雙機(jī)熱備,所以整個(gè)集群的讀和寫的可用性都非常高。讀寫分離架構(gòu)的缺陷在丁,不管是Master還是Slave,每個(gè)節(jié)點(diǎn)都必須保存完整的數(shù)據(jù),如果在數(shù)據(jù)量很大的情況下,集群的擴(kuò)展能力還是受限丁單個(gè)節(jié)點(diǎn)的存儲(chǔ)能力,而且對(duì)丁Write-intensive類型的應(yīng)用,讀寫分離架構(gòu)并不適合。數(shù)據(jù)分片模型為了解決讀寫分離模型的缺陷,可以將數(shù)據(jù)分片模型應(yīng)用進(jìn)來。可以將每個(gè)節(jié)點(diǎn)看成都是獨(dú)立的master,然后通過業(yè)務(wù)實(shí)現(xiàn)數(shù)

6、據(jù)分片。結(jié)合上面兩種模型,可以將每個(gè)master設(shè)計(jì)成由一個(gè)master和多個(gè)slave組成的模型。1. Redis的回收策略volatile-lru:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.dbi.expires)中挑選最近最少使用的數(shù)據(jù)淘汰volatile-ttl:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.dbi.expires)中挑選將要過期的數(shù)據(jù)淘汰volatile-random:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.dbi.expires)中任意選擇數(shù)據(jù)淘汰allkeys-lru:從數(shù)據(jù)集(server.dbi.dict)中挑選最近最少使用的數(shù)據(jù)淘汰allkeys-random:從數(shù)

7、據(jù)集(server.dbi.dict)中任意選擇數(shù)據(jù)淘汰no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)使用Redis有哪些好處?2. 速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似丁HashMapHashMap勺優(yōu)勢(shì)就是查找和操作的時(shí)間復(fù)雜度都是O(1)支持豐富數(shù)據(jù)類型,支持string,list,set,sortedset,hash支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行豐富的特性:可用丁緩存,消息,按key設(shè)置過期時(shí)間,過期后將會(huì)自動(dòng)刪除redis相比memcache(W哪些優(yōu)勢(shì)?3. memcache妍有的值均是簡(jiǎn)單的字符申,redis作為其替代者,支持更為豐

8、富的數(shù)據(jù)類型redis的速度比memcacheeft很多redis可以持久化其數(shù)據(jù)redis常見性能問題和解決方案:Master最好不要做任何持久化工作,如RD吶存快照和AOF日志文件如果數(shù)據(jù)比較重要,某個(gè)Slave開啟AOF&份數(shù)據(jù),策略設(shè)置為每秒同步一次為了主從復(fù)制的速度和連接的穩(wěn)定性,Master和Slave最好在同一個(gè)局域網(wǎng)內(nèi)盡量避免在壓力很大的主庫(kù)上增加從庫(kù)主從復(fù)制不要用圖狀結(jié)構(gòu),用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master這樣的結(jié)構(gòu)方便解決單點(diǎn)故障問題,實(shí)現(xiàn)Slave對(duì)Master的替換。如果Master掛了,可以立刻啟用Slavel做Master,其他不變。MySQ薛有200

9、0w數(shù)據(jù),redis中只存20w的數(shù)據(jù),如何保證redis中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)相關(guān)知識(shí):redis內(nèi)存數(shù)據(jù)集大小上升到一定大小的時(shí)候,就會(huì)施行數(shù)據(jù)淘汰策略。redis提供6種數(shù)據(jù)淘汰策略,上文已經(jīng)列出。4. Memcache與Redis的區(qū)別都有哪些?1)、存儲(chǔ)方式Memecach苻巴數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過內(nèi)存大小。Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。2)、數(shù)據(jù)支持類型Memcachet數(shù)據(jù)類型支持相對(duì)簡(jiǎn)單。Redis有復(fù)雜的數(shù)據(jù)類型。3)、使用底層模型不同它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣。Redis直接自己構(gòu)建了VM機(jī)制,因?yàn)?/p>

10、一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求。5. 4)、value大小redis最大可以達(dá)到1G日而memcacheR有1MBRedis常見的性能問題都有哪些?如何解決?1).Master寫內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會(huì)阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)問斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照。2).MasterAOF#久化,如果不重寫AOF件,這個(gè)持久化方式對(duì)性能的影響是最小的,但是AO頃件會(huì)不斷增大,AOF文件過大會(huì)影響Master重啟的恢復(fù)速度。Master最好不要做任何持久化工作,包括內(nèi)存快照和AOF日志文件,特別是不要啟

11、用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵,某個(gè)Slave開啟AOF&份數(shù)據(jù),策略為每秒同步一次。3).Master調(diào)用BGREWRITEAgAO以件,AOFft重寫的時(shí)候會(huì)占大量的CPU和內(nèi)存資源,導(dǎo)致服務(wù)load過高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。.Redis主從復(fù)制的性能問題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave和Master最好在同一個(gè)局域網(wǎng)內(nèi)redis最適合的場(chǎng)景Redis最適合所有數(shù)據(jù)in-momory的場(chǎng)景,雖然Redis也提供持久化功能,但實(shí)際更多的是一個(gè)disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別。那么可能大家就會(huì)有疑問,似乎Redis更像一個(gè)加強(qiáng)版的M

12、emcached那么何時(shí)使用Memcached何時(shí)使用Redis呢?如果簡(jiǎn)單地比較Redis與Memcached勺區(qū)別,大多數(shù)都會(huì)得到以下觀點(diǎn):Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。、會(huì)話緩存(SessionCache)最常用的一種使用Redis的情景是會(huì)話緩存(sessioncache)。用Redis緩存會(huì)話比其他存儲(chǔ)(如Memcached的優(yōu)勢(shì)在丁:Redis提供

13、持久化。當(dāng)維護(hù)一個(gè)不是嚴(yán)格要求一致性的緩存時(shí),如果用戶的購(gòu)物車信息全部丟失,大部分人都會(huì)不高興的,現(xiàn)在,他們還會(huì)這樣嗎?幸運(yùn)的是,隨著Redis這些年的改進(jìn),很容易找到怎么恰當(dāng)?shù)氖褂肦edis來緩存會(huì)話的文檔。甚至廣為人知的商業(yè)平臺(tái)Magento也提供Redis的插件。、全貞緩存(FPC除基本的會(huì)話token之外,Redis還提供很簡(jiǎn)便的FPC平臺(tái)?;氐揭恢滦詥栴},即使重啟了Redis實(shí)例,因?yàn)橛写疟P的持久化,用戶也不會(huì)看到頁(yè)面加載速度的下降,這是一個(gè)極大改進(jìn),類似PHE地FPC再次以Magento為例,Magento提供一個(gè)插件來使用Redis作為全貞緩存后端。此外,對(duì)WordPress的用

14、戶來說,Pantheon有一個(gè)非常好的插件wp-redis,這個(gè)插件能幫助你以最快速度加載你曾瀏覽過的頁(yè)面。、隊(duì)列Reids在內(nèi)存存儲(chǔ)引擎領(lǐng)域的一大優(yōu)點(diǎn)是提供list和set操作,這使得Redis能作為一個(gè)很好的消息隊(duì)列平臺(tái)來使用。Redis作為隊(duì)列使用的操作,就類似丁本地程序語言(如Python)對(duì)list的push/pop操作。如果你快速的在Google中搜索Redisqueues”,你馬上就能找到大量的開源項(xiàng)目,這些項(xiàng)目的目的就是利用Redis創(chuàng)建非常好的后端工具,以滿足各種隊(duì)列需求。例如,Celery有一個(gè)后臺(tái)就是使用Redis作為broker,你可以從這里去查看。,排行榜/計(jì)數(shù)器Re

15、dis在內(nèi)存中對(duì)數(shù)字進(jìn)行遞增或遞減的操作實(shí)現(xiàn)的非常好。集合(Set)和有序集合(SortedSet)也使得我們?cè)趫?zhí)行這些操作的時(shí)候變的非常簡(jiǎn)單,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)。所以,我們要從排序集合中獲取到排名最靠前的10個(gè)用戶我們稱之為user_scores”,我們只需要像下面一樣執(zhí)行即可:當(dāng)然,這是假定你是根據(jù)你用戶的分?jǐn)?shù)做遞增的排序。如果你想返回用戶及用戶的分?jǐn)?shù),你需要這樣執(zhí)行:ZRANGEuser_scores010WITHSCORESAgoraGame就是一個(gè)很好的例子,用Ruby實(shí)現(xiàn)的,它的排行榜就是使用Redis來存儲(chǔ)數(shù)據(jù)的,你可以在這里看到。、發(fā)布/訂閱最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的使用場(chǎng)景確實(shí)非常多。我已看見人們?cè)谏缃痪W(wǎng)絡(luò)連接中使用,還可作為基丁發(fā)布/訂閱的腳本觸發(fā)器,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)!(不,這是真的,你可以去核實(shí))。Redis提供的所有特性中,我感覺這個(gè)是喜歡的人最少的一個(gè),雖然它為用戶提供如果此多功能。那如何學(xué)習(xí)才能快速入門并精通呢?當(dāng)真正開始學(xué)習(xí)的時(shí)候難免不知道從哪入手,導(dǎo)致效率低下影響繼續(xù)學(xué)習(xí)的信心。但最重要的是不知道哪些技術(shù)需要重點(diǎn)掌握,學(xué)習(xí)時(shí)頻繁踩坑,最終浪費(fèi)大量時(shí)問,所以有一套實(shí)用的視頻課程用來跟著學(xué)習(xí)是非常有必要的。為了讓學(xué)習(xí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論