GitHub版本地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/Redis_beats_Memcached.md
Memcached還是Redis? 在現(xiàn)代高性能Web利用中這1直是個(gè)爭(zhēng)辯不休的話題。 在基于關(guān)系型http://www.jyygyx.com/db/的Web利用需要提高性能時(shí),使用緩存是絕大多數(shù)架構(gòu)師的第1選擇,自然,Memcached和Redis通常是優(yōu)先選擇。
Memcached最初在2003年由 Brad Fitzpatrick 為 LiveJournal網(wǎng)站開發(fā)。然后又用C語言重寫了1遍(初版為Perl實(shí)現(xiàn)),并開放給公眾使用,從此成為現(xiàn)代Web系統(tǒng)開發(fā)的基石。 當(dāng)前Memcached的發(fā)展方向是改進(jìn)穩(wěn)定性和性能優(yōu)化,而不是添加新功能特性。
Redis于2009年由 Salvatore Sanfilippo 創(chuàng)建, 直到今天 Sanfilippo 仍然是Redis的唯1開發(fā)者和代碼保護(hù)者。 Redis也被稱為 "Memcached增強(qiáng)版(Memcached on steroids)", 這1點(diǎn)也不使人驚訝, 由于 Redis 有1部份就是在 Memcached 的經(jīng)驗(yàn)總結(jié)之上構(gòu)建的的。 Redis比Memcached具有更多的功能特性,這使得它更靈活,更強(qiáng)大也更復(fù)雜。
Memcached和Redis被眾多企業(yè)和大量生產(chǎn)系統(tǒng)所采取, 支持各種語言開發(fā)的客戶端,有豐富的SDK。 事實(shí)上, 在上點(diǎn)范圍的http://www.jyygyx.com/Internet/Web開發(fā)語言中,基本上沒有不支持Memcached或Redis的。
為何Memcached和Redis如此流行? 不但是其具有超高的性能,還由于相對(duì)來講他們都非常簡單。 對(duì)http://www.jyygyx.com來講上手使用Memcached或Redis相當(dāng)容易。 安裝和設(shè)置并集成到系統(tǒng)中可能只需要幾分鐘時(shí)間。 因此花費(fèi)1點(diǎn)點(diǎn)時(shí)間和精力就可以立刻大幅提升系統(tǒng)性能 ―― 通常是提升1個(gè)數(shù)量級(jí)。 1個(gè)簡潔的解決方案卻能取得巨大的性能收益: 這酸爽簡直超乎你的想象。
由于Redis是新興解決方案,提供了更多的功能特性,比起Memcached來講, Redis1般都是更好的選擇。 在兩個(gè)特定場(chǎng)景下Memcached多是更好的選擇。
第1種是很細(xì)碎的靜態(tài)數(shù)據(jù),如HTML代碼片斷。 Memcached的內(nèi)存管理不像Redis那末復(fù)雜,所以性能更高1些,緣由是Memcached 的元數(shù)據(jù)metadata更小,相對(duì)來講額外開消就很少。 Memcached唯1支持的數(shù)據(jù)類型是字符串 String
,非常合適緩存只讀數(shù)據(jù),由于字符串不需要額外的處理。
第2個(gè)場(chǎng)景,是Memcached比Redis更容易水平擴(kuò)大。 緣由在于它的設(shè)計(jì)和和功能很簡單,Memcached更容易擴(kuò)大。 消息顯示, Redis在行將到來的3.0版(瀏覽CA版本發(fā)布筆記)將內(nèi)置可靠的集群支持[但1直在跳票]。
除非受環(huán)境制約(如遺留系統(tǒng)),或業(yè)務(wù)符合上面的2種情況,否則你應(yīng)當(dāng)優(yōu)先選擇Redis。 使用Redis作為緩存,通過調(diào)優(yōu)緩存內(nèi)容,系統(tǒng)效力能取得極為提升。
很明顯Redis的優(yōu)勢(shì)在于緩存管理。 緩存通過某種數(shù)據(jù)回收機(jī)制(data eviction mechanism)在必要時(shí)將舊數(shù)據(jù)從內(nèi)存中刪除,為新數(shù)據(jù)騰出空間。 Memcached的數(shù)據(jù)回收機(jī)制使用LRU(Least Recently Used,最近最少使用)算法,同時(shí)優(yōu)先清除與新數(shù)據(jù)大小差不多的舊數(shù)據(jù)塊。 相比之下,Redis允許細(xì)粒度控制過期緩存,有6種不同的策略可供選擇。 Redis還采取了1些更復(fù)雜的內(nèi)存管理方法和回收策略。
Redis對(duì)緩存的對(duì)象提供更大的靈活性。 而Memcached限制 key 為250字節(jié),限制 value 為1 MB,且只能通過純文本String通訊. Redis的 key 和 value 大小限制都是512 MB,是2進(jìn)制安全的【即不丟數(shù)據(jù),與編碼無關(guān)】。 Redis提供6種數(shù)據(jù)類型,使緩存和管理緩存變得更加智能和方便,為利用程序開發(fā)者打開了1個(gè)無窮可能的世界。
相比將對(duì)象序列化后通過字符串存儲(chǔ), Redis 通過 Hash來存儲(chǔ)1個(gè)對(duì)象的字段和值,并可以通過單個(gè)key來管理它們。
看看用Memcached更新1個(gè)對(duì)象需要干甚么:
并且每次更新都要干這些破事。
而使用Redis Hash的方式, 可以大幅度下降資源消耗并提高性能。 Redis的其他數(shù)據(jù)類型,如List 或 Set,可用來實(shí)現(xiàn)更復(fù)雜的緩存管理模式。
Redis的另外一個(gè)重大優(yōu)點(diǎn)是其存儲(chǔ)的數(shù)據(jù)是不透明的,這意味著在http://www.jyygyx.com/server/端可以直接操縱這些數(shù)據(jù)。 160多個(gè)命令中的大部份都可以用來進(jìn)行數(shù)據(jù)操作, 所以通過服務(wù)端腳本調(diào)用進(jìn)行數(shù)據(jù)處理成為現(xiàn)實(shí)。 這些內(nèi)置命令和用戶腳本可讓你直接靈活地處理數(shù)據(jù)任務(wù),而無需通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸給另外一個(gè)系統(tǒng)進(jìn)行處理。
Redis提供了可選/可調(diào)劑的數(shù)據(jù)持久化, 目的是為了在 崩潰/重啟后可以快速加載緩存。 雖然我們1般認(rèn)為緩存中的數(shù)據(jù)是不穩(wěn)定,瞬時(shí)的, 但在緩存系統(tǒng)中將數(shù)據(jù)持久化到磁盤還是很有價(jià)值的。 在重啟后立即加載預(yù)熱的方式耗時(shí)很短, 而且減輕了主http://www.jyygyx.com/db/系統(tǒng)的開消。
最后, Redis提供主從復(fù)制(replication)。 Replication 可用于實(shí)現(xiàn)高可用的cache系統(tǒng),允許某些http://www.jyygyx.com/server/宕機(jī)的情況下也能提供不中斷的服務(wù)。 假定要求在某臺(tái)緩存http://www.jyygyx.com/server/崩潰時(shí), 只有少部份用戶和程序在短時(shí)間內(nèi)受影響, 大多數(shù)情況下就需要有1個(gè)行之有效的解決方案,來保證緩存內(nèi)容和服務(wù)的可用性。
現(xiàn)今開源軟件1直在提供最好的實(shí)用技術(shù)方案。 需要使用緩存來提高利用系統(tǒng)性能時(shí),Redis和Memcached是最好的產(chǎn)品級(jí)解決方案。 但斟酌到其豐富的功能和先進(jìn)的設(shè)計(jì),絕大多數(shù)時(shí)候Redis都應(yīng)當(dāng)是你的第1選擇。
作者簡介: Itamar Haber (@itamarhaber) 是 Redis Labs的首席開發(fā)人員, 該企業(yè)為開發(fā)人員提供完全托管的Memcached和Redis云服務(wù)。 具有多年軟件產(chǎn)品研發(fā)經(jīng)驗(yàn),曾在 Xeround, Etagon, Amicada, and M.N.S Ltd.擔(dān)負(fù)管理和領(lǐng)導(dǎo)職位. Itamar 取得 Northwestern and Tel-Aviv Universitiesd 的Kellogg-Recanati工商管理碩士, 和 Science in Computer Science 學(xué)士。
相干瀏覽:
原文鏈接: Why Redis beats Memcached for caching
原文日期: 2014⑴0⑴5
翻譯日期: 2014⑴0⑵3
翻譯人員: 鐵錨