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