1. 使用Redis有哪些好處? (1) 速度快,因為數(shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1) (2) 支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash (3) 支持事務(wù),操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行 (4) 豐富的特性:可用于緩存,消息,按key設(shè)置過期時間,過期后將會自動刪除 2. redis相比memcached有哪些優(yōu)勢? (1) memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型 (2) redis的速度比memcached快很多 (3) redis可以持久化其數(shù)據(jù) (4)Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。 (5)、使用底層模型不同 它們之間底層實現(xiàn)方式 以及與客戶端之間通信的應(yīng)用協(xié)議不一樣。 Redis直接自己構(gòu)建了VM 機制 ,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。 (6)value大?。簉edis最大可以達到1GB,而memcache只有1MB 3. redis常見性能問題和解決方案: (1) Master最好不要做任何持久化工作,如RDB內(nèi)存快照和AOF日志文件 (Master寫內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會阻塞主線程的工作,當(dāng)快照比較大時對性能影響是非常大的,會間斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照;AOF文件過大會影響Master重啟的恢復(fù)速度) (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掛了,可以立刻啟用Slave1做Master,其他不變。 redis的一些其他特點: (1)Redis是單進程單線程的redis利用隊列技術(shù)將并發(fā)訪問變?yōu)榇性L問,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷 (2)讀寫分離模型通過增加Slave DB的數(shù)量,讀的性能可以線性增長。為了避免Master DB的單點故障,集群一般都會采用兩臺Master DB做雙機熱備,所以整個集群的讀和寫的可用性都非常高。 (3)數(shù)據(jù)分片模型為了解決讀寫分離模型的缺陷,可以將數(shù)據(jù)分片模型應(yīng)用進來。 可以將每個節(jié)點看成都是獨立的master,然后通過業(yè)務(wù)實現(xiàn)數(shù)據(jù)分片。 結(jié)合上面兩種模型,可以將每個master設(shè)計成由一個master和多個slave組成的模型。 (4)Redis的回收策略
|
|