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

下載本文檔

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

文檔簡介

Redis是一個基于內(nèi)存的高性能key-value數(shù)據(jù)庫。(有空再補(bǔ)充,有理解錯誤或不足歡迎指正)Reids的特點(diǎn)Redis本質(zhì)上是一個Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像memcached,整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進(jìn)行保存。因?yàn)槭羌儍?nèi)存操作,Redis的性能特別精彩,每秒可以處理超過10萬次讀寫操作,是已知性能最快的Key-ValueDBORedis的精彩之處不僅僅是性能,Redis最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個value的最大限制是1GB,不像memcached只能保存1MB的數(shù)據(jù),因此Redis可以用來實(shí)現(xiàn)許多有用的功能,比方說用他的List來做FIFO雙向鏈表,實(shí)現(xiàn)一個輕量級的高性能消息隊(duì)列服務(wù),用他的Set可以做高性能的tag系統(tǒng)等等。另外Redis也可以對存入的Key-Value設(shè)置expire時間,因此也可以被當(dāng)作一個功能加強(qiáng)版的memcached來用。Redis的主要缺點(diǎn)是數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。Redis支持的數(shù)據(jù)類型除基本的會話token之外,Redis還供應(yīng)很簡便的FPC平臺?;氐揭粯有詥栴},即使重啟了Redis實(shí)例,因?yàn)橛写疟P的長久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進(jìn),類似PHP本地FPC。再次以Magento為例,Magento供應(yīng)一個插件來運(yùn)用Redis作為全頁緩存后端。此外,對WordPress的用戶來說,Pantheon有一個特別好的插件wp-redis,這個插件能幫助你以最快速度加載你曾閱讀過的頁面。(3)、隊(duì)列Reids在內(nèi)存存儲引擎領(lǐng)域的一大優(yōu)點(diǎn)是供應(yīng)list和set操作,這使得Redis能作為一個很好的消息隊(duì)列平臺來運(yùn)用。Redis作為隊(duì)列運(yùn)用的操作,就類似于本地程序語言(如Python)對list的push/pop操作。假如你快速的在Google中搜尋“Redisqueues",你立刻就能找到大量的開源項(xiàng)目,這些項(xiàng)目的目的就是利用Redis創(chuàng)建特別好的后端工具,以滿意各種隊(duì)列需求。例如,Celery有一個后臺就是運(yùn)用Redis作為broker,你可以從這里去查看。(4),排行榜/計(jì)數(shù)器Redis在內(nèi)存中對數(shù)字進(jìn)行遞增或遞減的操作實(shí)現(xiàn)的特別好。集合(Set)和有序集合(SortedSet)也使得我們在執(zhí)行這些操作的時候變的特別簡潔,Redis只是正好供應(yīng)了這兩種數(shù)據(jù)結(jié)構(gòu)。所以,我們要從排序集合中獲得到排名最靠前的10個用戶-我們稱之為“user_scores",我們只須要像下面一樣執(zhí)行即可:當(dāng)然,這是假定你是依據(jù)你用戶的分?jǐn)?shù)做遞增的排序。假如你想返回用戶與用戶的分?jǐn)?shù),你須要這樣執(zhí)行:ZRANGEuser_scores010WITHSC0RESAgoraGames就是一個很好的例子,用Ruby實(shí)現(xiàn)的,它的排行榜就是運(yùn)用Redis來存儲數(shù)據(jù)的,你可以在這里看到。(5)、發(fā)布/訂閱最終(但確定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的運(yùn)用場景的確特別多。我已望見人們在社交網(wǎng)絡(luò)連接中運(yùn)用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器,甚至用Redis的發(fā)布/訂閱功能來建立閑聊系統(tǒng)?。ú唬@是真的,你可以去核實(shí))。Redis供應(yīng)的全部特性中,我感覺這個是喜愛的人最少的一個,雖然它為用戶供應(yīng)假如此多功能。那如何學(xué)習(xí)才能快速入門并精通呢?當(dāng)真正起先學(xué)習(xí)的時候難免不知道從哪入手,導(dǎo)致效率低下影響接著學(xué)習(xí)的信念。但最重要的是不知道哪些技術(shù)須要重點(diǎn)駕馭,學(xué)習(xí)時頻繁踩坑,最終奢侈大量時間,所以有一套好用的視頻課程用來跟著學(xué)習(xí)是特別有必要的。為了讓學(xué)習(xí)變得輕松、高效,今日給大家免費(fèi)共享一套阿里架構(gòu)師傳授的一套教學(xué)資源。幫助大家在成為架構(gòu)師的道路上乘風(fēng)破浪。這套視頻課程具體講解了(Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu))等這些成為架構(gòu)師必備的內(nèi)容!而且還把框架須要用到的各種程序進(jìn)行了打包,依據(jù)基礎(chǔ)視頻可以讓你輕松搭建分布式框架環(huán)境,像在企業(yè)生產(chǎn)環(huán)境一樣進(jìn)行學(xué)習(xí)和實(shí)踐。Redis通過Key-Value的單值不同類型來區(qū)分,以下是支持的類型:StringsListsSets求交集、并集SortedSethashes為什么redis須要把全部數(shù)據(jù)放到內(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將會越來越受歡迎。假如設(shè)置了最大運(yùn)用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達(dá)到內(nèi)存限值后不能接著插入新值。Redis是單進(jìn)程單線程的redis利用隊(duì)列技術(shù)將并發(fā)訪問變?yōu)榇性L問,消退了傳統(tǒng)數(shù)據(jù)庫串行限制的開銷虛擬內(nèi)存當(dāng)你的key很小而value很大時,運(yùn)用VM的效果會比較好.因?yàn)檫@樣節(jié)約的內(nèi)存比較大.當(dāng)你的key不小時,可以考慮運(yùn)用一些特別方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個新的value.vm-max-threads這個參數(shù),可以設(shè)置訪問swap文件的線程數(shù),設(shè)置最好不要超過機(jī)器的核數(shù),假如設(shè)置為0,那么全部對swap文件的操作都是串行的.可能會造成比較長時間的延遲,但是對數(shù)據(jù)完整性有很好的保證.自己測試的時候發(fā)覺用虛擬內(nèi)存性能也不錯。假如數(shù)據(jù)量很大,可以考慮分布式或者其他數(shù)據(jù)庫分布式redis支持主從的模式。原則:Master會將數(shù)據(jù)同步到slave,而slave不會將數(shù)據(jù)同步到masteroSlave啟動時會連接master來同步數(shù)據(jù)。這是一個典型的分布式讀寫分別模型。我們可以利用master來插入數(shù)據(jù),slave供應(yīng)檢索服務(wù)。這樣可以有效削減單個機(jī)器的并發(fā)訪問數(shù)量。讀寫分別模型通過增加SlaveDB的數(shù)量,讀的性能可以線性增長。為了避開MasterDB的單點(diǎn)故障,集群一般都會采納兩臺MasterDB做雙機(jī)熱備,所以整個集群的讀和寫的可用性都特別高。讀寫分別架構(gòu)的缺陷在于,不管是Master還是Slave,每個節(jié)點(diǎn)都必需保存完整的數(shù)據(jù),假如在數(shù)據(jù)量很大的狀況下,集群的擴(kuò)展實(shí)力還是受限于單個節(jié)點(diǎn)的存儲實(shí)力,而且對于Write-intensive類型的應(yīng)用,讀寫分別架構(gòu)并不適合。數(shù)據(jù)分片模型為了解決讀寫分別模型的缺陷,可以將數(shù)據(jù)分片模型應(yīng)用進(jìn)來??梢詫⒚總€節(jié)點(diǎn)看成都是獨(dú)立的master,然后通過業(yè)務(wù)實(shí)現(xiàn)數(shù)據(jù)分片。結(jié)合上面兩種模型,可以將每個master設(shè)計(jì)成由一個master和多個slave組成的模型。Redis的回收策略volatile-lru:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中選擇最近最少運(yùn)用的數(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].diet)中選擇最近最少運(yùn)用的數(shù)據(jù)淘汰allkeys-random:從數(shù)據(jù)集(server.db[i].diet)中隨意選擇數(shù)據(jù)淘汰no-enviction(驅(qū)除):禁止驅(qū)除數(shù)據(jù)運(yùn)用Redis有哪些好處?速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間困難度都是。(1)支持豐富數(shù)據(jù)類型,支持string,list,set,sortedset,hash支持事務(wù),操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行豐富的特性:可用于緩存,消息,按key設(shè)置過期時間,過期后將會自動刪除redis相比memcached有哪些優(yōu)勢?memcached全部的值均是簡潔的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型redis的速度比memcached快許多redis可以長久化其數(shù)據(jù)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這樣的結(jié)構(gòu)便利解決單點(diǎn)故障問題,實(shí)現(xiàn)Slave對Master的替換。假如Master掛了,可以立即啟用Slavel做Master,其他不變。MySQL里有2000w數(shù)據(jù),redis中只存20w的數(shù)據(jù),如何保證redis中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)相關(guān)學(xué)問:redis內(nèi)存數(shù)據(jù)集大小上升到確定大小的時候,就會施行數(shù)據(jù)淘汰策略。redis供應(yīng)6種數(shù)據(jù)淘汰策略,上文已經(jīng)列出。Memcache與Redis的區(qū)分都有哪些?1)、存儲方式Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大小。Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的長久性。2)、數(shù)據(jù)支持類型Memcache對數(shù)據(jù)類型支持相對簡潔。Redis有困難的數(shù)據(jù)類型。3)、運(yùn)用底層模型不同它們之間底層實(shí)現(xiàn)方式以與與客戶端之間通信的應(yīng)用協(xié)議不一樣。Redis干脆自己構(gòu)建了VM機(jī)制,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會奢侈確定的時間去移動和懇求。4)、value大小redis最大可以達(dá)到1GB,而memcache只有1MBRedis常見的性能問題都有哪些?如何解決?.Master寫內(nèi)存快照,save吩咐調(diào)度rdbSave函數(shù),會堵塞主線程的工作,當(dāng)快照比較大時對性能影響是特別大的,會間斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照。.MasterAOF長久化,假如不重寫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ù)暫?,F(xiàn)象。.Redis主從復(fù)制的性能問題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave和Master最好在同一個局域網(wǎng)內(nèi)7,redis最適合的場景Redis最適合全部數(shù)據(jù)in-momory的場景,雖然Redis也供應(yīng)長久化功能,但實(shí)際更多的是一個disk-backed的功能,跟傳統(tǒng)意義上的長久化有比較大的差別。那么可能大家就會有疑問,好像Redis更像一個加強(qiáng)版的Memcached,那么何時運(yùn)用Memcached,何時運(yùn)用Redis呢?假如簡潔地比較Redis與Memcached的區(qū)分,大多數(shù)都會得到以下觀點(diǎn):Redis不僅僅支持簡潔的k/v類型的數(shù)據(jù),同時還供應(yīng)list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。Redis支持?jǐn)?shù)據(jù)的長久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進(jìn)行

溫馨提示

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

最新文檔

評論

0/150

提交評論