Redis和Memcache優(yōu)缺點(diǎn)對(duì)比

1、 Redis和Memcache都是將數(shù)據(jù)存放在內(nèi)存中酬凳,都是內(nèi)存數(shù)據(jù)庫(kù)懈词。不過(guò)memcache還可用于緩存其他東西,例如圖片甚颂、視頻等等。
2、Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù)回论,同時(shí)還提供list,set分歇,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)傀蓉。
3、虛擬內(nèi)存–Redis當(dāng)物理內(nèi)存用完時(shí)职抡,可以將一些很久沒(méi)用到的value 交換到磁盤(pán)
4葬燎、過(guò)期策略–memcache在set時(shí)就指定,例如set key1 0 0 8,即永不過(guò)期缚甩。Redis可以通過(guò)例如expire 設(shè)定谱净,例如expire name 10
5、分布式–設(shè)定memcache集群擅威,利用magent做一主多從;redis可以做一主多從壕探。都可以一主一從
6、存儲(chǔ)數(shù)據(jù)安全–memcache掛掉后郊丛,數(shù)據(jù)沒(méi)了李请;redis可以定期保存到磁盤(pán)(持久化)
7、災(zāi)難恢復(fù)–memcache掛掉后厉熟,數(shù)據(jù)不可恢復(fù); redis數(shù)據(jù)丟失后可以通過(guò)aof恢復(fù)
8导盅、Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份庆猫。

關(guān)于redis和memcache的不同认轨,下面羅列了一些相關(guān)說(shuō)法,供記錄:

redis和memecache的不同在于[2]:
1月培、存儲(chǔ)方式:
memecache 把數(shù)據(jù)全部存在內(nèi)存之中嘁字,斷電后會(huì)掛掉,數(shù)據(jù)不能超過(guò)內(nèi)存大小
redis有部份存在硬盤(pán)上杉畜,這樣能保證數(shù)據(jù)的持久性纪蜒,支持?jǐn)?shù)據(jù)的持久化(筆者注:有快照和AOF日志兩種持久化方式,在實(shí)際應(yīng)用的時(shí)候此叠,要特別注意配置文件快照參數(shù)纯续,要不就很有可能服務(wù)器頻繁滿載做dump)。
2、數(shù)據(jù)支持類型:
redis在數(shù)據(jù)支持上要比memecache多的多猬错。
3窗看、使用底層模型不同:
新版本的redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話倦炒,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求显沈。
4、運(yùn)行環(huán)境不同:
redis目前官方只支持LINUX 上去行逢唤,從而省去了對(duì)于其它系統(tǒng)的支持拉讯,這樣的話可以更好的把精力用于本系統(tǒng) 環(huán)境上的優(yōu)化,雖然后來(lái)微軟有一個(gè)小組為其寫(xiě)了補(bǔ)丁鳖藕。但是沒(méi)有放到主干上

個(gè)人總結(jié)一下魔慷,有持久化需求或者對(duì)數(shù)據(jù)結(jié)構(gòu)和處理有高級(jí)要求的應(yīng)用,選擇redis著恩,其他簡(jiǎn)單的key/value存儲(chǔ)院尔,選擇memcache。

下面重點(diǎn)分析Memcached和Redis兩種方案:
Memcached介紹
Memcached 是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng)页滚,用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載召边。它通過(guò)在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來(lái)減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提供動(dòng)態(tài)裹驰、數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度隧熙,現(xiàn)在已被LiveJournal、hatena幻林、Facebook贞盯、Vox、LiveJournal等公司所使用沪饺。

Memcached工作方式分析
許多Web應(yīng)用都將數(shù)據(jù)保存到 RDBMS中躏敢,應(yīng)用服務(wù)器從中讀取數(shù)據(jù)并在瀏覽器中顯示。 但隨著數(shù)據(jù)量的增大整葡、訪問(wèn)的集中件余,就會(huì)出現(xiàn)RDBMS的負(fù)擔(dān)加重、數(shù)據(jù)庫(kù)響應(yīng)惡化遭居、 網(wǎng)站顯示延遲等重大影響啼器。Memcached是高性能的分布式內(nèi)存緩存服務(wù)器,通過(guò)緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問(wèn)次數(shù)俱萍,以提高動(dòng)態(tài)Web等應(yīng)用的速度端壳、 提高可擴(kuò)展性。下圖展示了memcache與數(shù)據(jù)庫(kù)端協(xié)同工作情況:

其中的過(guò)程是這樣的:
1.檢查用戶請(qǐng)求的數(shù)據(jù)是緩存中是否有存在枪蘑,如果有存在的話损谦,只需要直接把請(qǐng)求的數(shù)據(jù)返回岖免,無(wú)需查詢數(shù)據(jù)庫(kù)。
2.如果請(qǐng)求的數(shù)據(jù)在緩存中找不到照捡,這時(shí)候再去查詢數(shù)據(jù)庫(kù)颅湘。返回請(qǐng)求數(shù)據(jù)的同時(shí),把數(shù)據(jù)存儲(chǔ)到緩存中一份栗精。
3.保持緩存的“新鮮性”栅炒,每當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候(比如,數(shù)據(jù)有被修改术羔,或被刪除的情況下),要同步的更新緩存信息乙漓,確保用戶不會(huì)在緩存取到舊的數(shù)據(jù)级历。

Memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點(diǎn):
1.協(xié)議簡(jiǎn)單
2.基于libevent的事件處理
3.內(nèi)置內(nèi)存存儲(chǔ)方式
4.memcached不互相通信的分布式

如何實(shí)現(xiàn)分布式可拓展性叭披?
Memcached的分布式不是在服務(wù)器端實(shí)現(xiàn)的寥殖,而是在客戶端應(yīng)用中實(shí)現(xiàn)的,即通過(guò)內(nèi)置算法制定目標(biāo)數(shù)據(jù)的節(jié)點(diǎn)涩蜘,如下圖所示:

Redis 介紹
Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)嚼贡。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多同诫,包括string(字符串)粤策、 list(鏈表)、set(集合)和zset(有序集合)误窖。這些數(shù)據(jù)類型都支持push/pop叮盘、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的霹俺。在此基礎(chǔ)上柔吼,redis支持各種不同方式的排序。與memcached一樣丙唧,為了保證效率愈魏,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件想际,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步,當(dāng)前 Redis的應(yīng)用已經(jīng)非常廣泛培漏,國(guó)內(nèi)像新浪、淘寶沼琉,國(guó)外像 Flickr北苟、Github等均在使用Redis的緩存服務(wù)。

Redis 工作方式分析
Redis作為一個(gè)高性能的key-value數(shù)據(jù)庫(kù)具有以下特征:
1.多樣的數(shù)據(jù)模型
2.持久化
3.主從同步
Redis支持豐富的數(shù)據(jù)類型打瘪,最為常用的數(shù)據(jù)類型主要由五種:String友鼻、Hash傻昙、List、Set和Sorted Set彩扔。Redis通常將數(shù)據(jù)存儲(chǔ)于內(nèi)存中妆档,或被配置為使用虛擬內(nèi)存。Redis有一個(gè)很重要的特點(diǎn)就是它可以實(shí)現(xiàn)持久化數(shù)據(jù)虫碉,通過(guò)兩種方式可以實(shí)現(xiàn)數(shù)據(jù)持久化:使用RDB快照的方式贾惦,將內(nèi)存中的數(shù)據(jù)不斷寫(xiě)入磁盤(pán);或使用類似MySQL的AOF日志方式敦捧,記錄每次更新的日志须板。前者性能較高,但是可能會(huì)引起一定程度的數(shù)據(jù)丟失兢卵;后者相反习瑰。 Redis支持將數(shù)據(jù)同步到多臺(tái)從數(shù)據(jù)庫(kù)上,這種特性對(duì)提高讀取性能非常有益秽荤。

Redis如何實(shí)現(xiàn)分布式可拓展性甜奄?
2.8以前的版本:與Memcached一致,可以在客戶端實(shí)現(xiàn)窃款,也可以使用代理课兄,twitter已開(kāi)發(fā)出用于Redis和Memcached的代理Twemproxy 。
3.0 以后的版本:相較于Memcached只能采用客戶端實(shí)現(xiàn)分布式存儲(chǔ)晨继,Redis則在服務(wù)器端構(gòu)建分布式存儲(chǔ)烟阐。Redis Cluster是一個(gè)實(shí)現(xiàn)了分布式且允許單點(diǎn)故障的Redis高級(jí)版本,它沒(méi)有中心節(jié)點(diǎn)踱稍,各個(gè)節(jié)點(diǎn)地位一致曲饱,具有線性可伸縮的功能。如圖給出Redis Cluster的分布式存儲(chǔ)架構(gòu)珠月,其中節(jié)點(diǎn)與節(jié)點(diǎn)之間通過(guò)二進(jìn)制協(xié)議進(jìn)行通信扩淀,節(jié)點(diǎn)與客戶端之間通過(guò)ascii協(xié)議進(jìn)行通信。在數(shù)據(jù)的放置策略上啤挎,Redis Cluster將整個(gè) key的數(shù)值域分成16384個(gè)哈希槽驻谆,每個(gè)節(jié)點(diǎn)上可以存儲(chǔ)一個(gè)或多個(gè)哈希槽,也就是說(shuō)當(dāng)前Redis Cluster支持的最大節(jié)點(diǎn)數(shù)就是16384庆聘。

綜合結(jié)論

應(yīng)該說(shuō)Memcached和Redis都能很好的滿足解決我們的問(wèn)題胜臊,它們性能都很高,總的來(lái)說(shuō)伙判,可以把Redis理解為是對(duì)Memcached的拓展象对,是更加重量級(jí)的實(shí)現(xiàn),提供了更多更強(qiáng)大的功能宴抚。具體來(lái)說(shuō):

1.性能上:
性能上都很出色勒魔,具體到細(xì)節(jié)甫煞,由于Redis只使用單核,而Memcached可以使用多核冠绢,所以平均每一個(gè)核上Redis在存儲(chǔ)小數(shù)據(jù)時(shí)比
Memcached性能更高抚吠。而在100k以上的數(shù)據(jù)中,Memcached性能要高于Redis弟胀,雖然Redis最近也在存儲(chǔ)大數(shù)據(jù)的性能上進(jìn)行優(yōu)化楷力,但是比起 Memcached,還是稍有遜色孵户。

2.內(nèi)存空間和數(shù)據(jù)量大邢舫:
MemCached可以修改最大內(nèi)存,采用LRU算法夏哭。Redis增加了VM的特性剪勿,突破了物理內(nèi)存的限制。

3.操作便利上:
MemCached數(shù)據(jù)結(jié)構(gòu)單一方庭,僅用來(lái)緩存數(shù)據(jù),而Redis支持更加豐富的數(shù)據(jù)類型酱固,也可以在服務(wù)器端直接對(duì)數(shù)據(jù)進(jìn)行豐富的操作,這樣可以減少網(wǎng)絡(luò)IO次數(shù)和數(shù)據(jù)體積械念。

4.可靠性上:
MemCached不支持?jǐn)?shù)據(jù)持久化,斷電或重啟后數(shù)據(jù)消失运悲,但其穩(wěn)定性是有保證的龄减。Redis支持?jǐn)?shù)據(jù)持久化和數(shù)據(jù)恢復(fù),允許單點(diǎn)故障班眯,但是同時(shí)也會(huì)付出性能的代價(jià)希停。

5.應(yīng)用場(chǎng)景:
Memcached:動(dòng)態(tài)系統(tǒng)中減輕數(shù)據(jù)庫(kù)負(fù)載,提升性能署隘;做緩存宠能,適合多讀少寫(xiě),大數(shù)據(jù)量的情況(如人人網(wǎng)大量查詢用戶信息磁餐、好友信息违崇、文章信息等)。
Redis:適用于對(duì)讀寫(xiě)效率要求都很高诊霹,數(shù)據(jù)處理業(yè)務(wù)復(fù)雜和對(duì)安全性要求較高的系統(tǒng)(如新浪微博的計(jì)數(shù)和微博發(fā)布部分系統(tǒng)羞延,對(duì)數(shù)據(jù)安全性、讀寫(xiě)要求都很高)脾还。

需要慎重考慮的部分
1.Memcached單個(gè)key-value大小有限伴箩,一個(gè)value最大只支持1MB,而Redis最大支持512MB
2.Memcached只是個(gè)內(nèi)存緩存鄙漏,對(duì)可靠性無(wú)要求嗤谚;而Redis更傾向于內(nèi)存數(shù)據(jù)庫(kù)棺蛛,因此對(duì)對(duì)可靠性方面要求比較高
3.從本質(zhì)上講,Memcached只是一個(gè)單一key-value內(nèi)存Cache呵恢;而Redis則是一個(gè)數(shù)據(jù)結(jié)構(gòu)內(nèi)存數(shù)據(jù)庫(kù)鞠值,支持五種數(shù)據(jù)類型,因此Redis除單純緩存作用外渗钉,還可以處理一些簡(jiǎn)單的邏輯運(yùn)算彤恶,Redis不僅可以緩存,而且還可以作為數(shù)據(jù)庫(kù)用
4.新版本(3.0)的Redis是指集群分布式鳄橘,也就是說(shuō)集群本身均衡客戶端請(qǐng)求声离,各個(gè)節(jié)點(diǎn)可以交流,可拓展行瘫怜、可維護(hù)性更強(qiáng)大

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末术徊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲸湃,更是在濱河造成了極大的恐慌赠涮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暗挑,死亡現(xiàn)場(chǎng)離奇詭異笋除,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)炸裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)垃它,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人烹看,你說(shuō)我怎么就攤上這事国拇。” “怎么了惯殊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵酱吝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我土思,道長(zhǎng)掉瞳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任浪漠,我火速辦了婚禮陕习,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘址愿。我一直安慰自己该镣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布响谓。 她就那樣靜靜地躺著损合,像睡著了一般省艳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫁审,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天跋炕,我揣著相機(jī)與錄音,去河邊找鬼律适。 笑死辐烂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捂贿。 我是一名探鬼主播纠修,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厂僧!你這毒婦竟也來(lái)了扣草?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颜屠,失蹤者是張志新(化名)和其女友劉穎辰妙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體甫窟,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡上岗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕴坪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敬锐,死狀恐怖背传,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情台夺,我是刑警寧澤径玖,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站颤介,受9級(jí)特大地震影響梳星,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滚朵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一冤灾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辕近,春花似錦韵吨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椿疗。三九已至,卻和暖如春糠悼,著一層夾襖步出監(jiān)牢的瞬間届榄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工倔喂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铝条,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓滴劲,卻偏偏與公主長(zhǎng)得像攻晒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子班挖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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