資源描述:
《【黑馬程序員】Redis面試題及分布式集群.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、【黑馬程序員】Redis面試題及分布式集群1.使用Redis有哪些好處?(1)速度快,因為數(shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1)(2)支持豐富數(shù)據(jù)類型,支持string,list,set,sortedset,hash(3)支持事務(wù),操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行(4)豐富的特性:可用于緩存,消息,按key設(shè)置過期時間,過期后將會自動刪除2.redis相比memcached有哪些優(yōu)勢?(1)memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型(2)red
2、is的速度比memcached快很多(3)redis可以持久化其數(shù)據(jù)3.redis常見性能問題和解決方案:(1)Master最好不要做任何持久化工作,如RDB內(nèi)存快照和AOF日志文件(2)如果數(shù)據(jù)比較重要,某個Slave開啟AOF備份數(shù)據(jù),策略設(shè)置為每秒同步一次(3)為了主從復(fù)制的速度和連接的穩(wěn)定性,Master和Slave最好在同一個局域網(wǎng)內(nèi)(4)盡量避免在壓力很大的主庫上增加從庫(5)主從復(fù)制不要用圖狀結(jié)構(gòu),用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master<-Slave1<-Slave2<-Slave3…這樣的結(jié)構(gòu)方便解決單點故障問題,實現(xiàn)Slave對Master的替換。如果Master掛了
3、,可以立刻啟用Slave1做Master,其他不變。4.MySQL里有2000w數(shù)據(jù),redis中只存20w的數(shù)據(jù),如何保證redis中的數(shù)據(jù)都是熱點數(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].expi
4、res)中任意選擇數(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ū)別都有哪些?1)、存儲方式????Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大小。????Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。2)、數(shù)據(jù)支持類型????Memcache對數(shù)據(jù)類型支持相對簡單。????Redis有復(fù)雜的數(shù)據(jù)類型。3)、使用底層模型不
5、同????它們之間底層實現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣。????Redis直接自己構(gòu)建了VM機制,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。4),value大小????redis最大可以達到1GB,而memcache只有1MB6.Redis常見的性能問題都有哪些?如何解決?1).Master寫內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照。2).MasterAOF持久化,如果不重寫AOF文件,這個持久化方式對性能的影響是最小的,但是AOF文件會不斷增
6、大,AOF文件過大會影響Master重啟的恢復(fù)速度。Master最好不要做任何持久化工作,包括內(nèi)存快照和AOF日志文件,特別是不要啟用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵,某個Slave開啟AOF備份數(shù)據(jù),策略為每秒同步一次。3).Master調(diào)用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會占大量的CPU和內(nèi)存資源,導(dǎo)致服務(wù)load過高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。4).Redis主從復(fù)制的性能問題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave和Master最好在同一個局域網(wǎng)內(nèi)7.redis最適合的場景Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功
7、能,但實際更多的是一個disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那么何時使用Memcached,何時使用Redis呢?如果簡單地比較Redis與Memcached的區(qū)別,大多數(shù)都會得到以下觀點:1、Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。2、Redis支持數(shù)據(jù)的備份,即