为何Redis要比Memcached好用(转)
轉載鏈接:http://blog.csdn.net/renfufei/article/details/40598889
GitHub版本地址:?https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/Redis_beats_Memcached.md
?
副標題: Redis是新興的通用存儲系統,而Memcached仍有其適用領域
?
Memcached還是Redis? 在現代高性能Web應用中這一直是個爭論不休的話題。 在基于關系型數據庫的Web應用需要提高性能時,使用緩存是絕大多數架構師的第一選擇,自然,Memcached和Redis通常是優先選擇。
共同特征
- 都是 key-value 形式的內存數據庫
- 都是NoSQL家族的數據管理解決方案
- 都基于同樣的key-value 數據模型
- 所有數據全部放在內存中(這也是適用于緩存的原因)
- 性能得分不分伯仲,包括數據吞吐量和延遲等指標
- 都是成熟的、廣受開源項目歡迎的 key-value存儲系統
Memcached最初在2003年由 Brad Fitzpatrick 為 LiveJournal網站開發。然后又用C語言重寫了一遍(初版為Perl實現),并開放給公眾使用,從此成為現代Web系統開發的基石。 當前Memcached的發展方向是改進穩定性和性能優化,而不是添加新功能特性。
Redis于2009年由 Salvatore Sanfilippo 創建, 直到今天 Sanfilippo 依然是Redis的唯一開發者和代碼維護者。 Redis也被稱為 "Memcached增強版(Memcached on steroids)", 這一點也不令人驚訝, 因為 Redis 有一部分就是在 Memcached 的經驗總結之上構建的的。 Redis比Memcached具有更多的功能特性,這使得它更靈活,更強大也更復雜。
Memcached和Redis被眾多企業以及大量生產系統所采用, 支持各種語言開發的客戶端,有豐富的SDK。 事實上, 在上點規模的互聯網Web開發語言中,基本上沒有不支持Memcached或Redis的。
為什么Memcached和Redis如此流行? 不僅是其具有超高的性能,還因為相對來說他們都非常簡單。 對程序員來說上手使用Memcached或Redis相當容易。 安裝和設置并集成到系統中可能只需要幾分鐘時間。 因此花費一點點時間和精力就能立刻大幅提升系統性能 —— 通常是提升一個數量級。 一個簡潔的解決方案卻能獲得巨大的性能收益: 這酸爽簡直超乎你的想象。
Memcached 適用場景
因為Redis是新興解決方案,提供了更多的功能特性,比起Memcached來說, Redis一般都是更好的選擇。 在兩個特定場景下Memcached可能是更好的選擇。
第一種是很細碎的靜態數據,如HTML代碼片段。 Memcached的內存管理不像Redis那么復雜,所以性能更高一些,原因是Memcached 的元數據metadata更小,相對來說額外開銷就很少。 Memcached唯一支持的數據類型是字符串?String,非常適合緩存只讀數據,因為字符串不需要額外的處理。
第二個場景,是Memcached比Redis更容易水平擴展。 原因在于它的設計和和功能很簡單,Memcached更容易擴展。 消息顯示, Redis在即將到來的3.0版(閱讀CA版本發布筆記)將內置可靠的集群支持[但一直在跳票]。
Redis 用武之地
除非受環境制約(如遺留系統),或者業務符合上面的2種情況,否則你應該優先選擇Redis。 使用Redis作為緩存,通過調優緩存內容,系統效率能獲得極其提升。
很明顯Redis的優勢在于緩存管理。 緩存通過某種數據回收機制(data eviction mechanism)在必要時將舊數據從內存中刪除,為新數據騰出空間。 Memcached的數據回收機制使用LRU(Least Recently Used,最近最少使用)算法,同時優先清除與新數據大小差不多的舊數據塊。 相比之下,Redis允許細粒度控制過期緩存,有6種不同的策略可供選擇。 Redis還采用了一些更復雜的內存管理方法和回收策略。
Redis對緩存的對象提供更大的靈活性。 而Memcached限制 key 為250字節,限制 value 為1 MB,且只能通過純文本String通信.?Redis的 key 和 value 大小限制都是512 MB,是二進制安全的【即不丟數據,與編碼無關】。 Redis提供6種數據類型,使緩存以及管理緩存變得更加智能和方便,為應用程序開發者打開了一個無限可能的世界。
相比將對象序列化后通過字符串存儲, Redis 通過 Hash來存儲一個對象的字段和值,并可以通過單個key來管理它們。
看看用Memcached更新一個對象需要干什么:
- 獲取整個字符串
- 反序列化為對象
- 修改其中的值
- 再次序列化該對象
- 在緩存中將整個字符串替換為新字符串
并且每次更新都要干這些破事。
而使用Redis Hash的方式, 可以大幅度降低資源消耗并提高性能。 Redis的其他數據類型,如List 或者 Set,可用來實現更復雜的緩存管理模式。
Redis的另一個重大優點是其存儲的數據是不透明的,這意味著在服務器端可以直接操縱這些數據。 160多個命令中的大部分都可以用來進行數據操作, 所以通過服務端腳本調用進行數據處理成為現實。 這些內置命令和用戶腳本可以讓你直接靈活地處理數據任務,而無需通過網絡將數據傳輸給另一個系統進行處理。
Redis提供了可選/可調整的數據持久化, 目的是為了在 崩潰/重啟后可以快速加載緩存。 雖然我們一般認為緩存中的數據是不穩定,瞬時的, 但在緩存系統中將數據持久化到磁盤還是很有價值的。 在重啟后立即加載預熱的方式耗時很短, 而且減輕了主數據庫系統的開銷。
最后, Redis提供主從復制(replication)。 Replication 可用于實現高可用的cache系統,允許某些服務器宕機的情況下也能提供不間斷的服務。 假設要求在某臺緩存服務器崩潰時, 只有少部分用戶和程序在短時間內受影響, 大多數情況下就需要有一個行之有效的解決方案,來保證緩存內容和服務的可用性。
當今開源軟件一直在提供最佳的實用技術方案。 需要使用緩存來提高應用系統性能時,Redis和Memcached是最佳的產品級解決方案。 但考慮到其豐富的功能和先進的設計,絕大多數時候Redis都應該是你的第一選擇。
作者簡介: 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 學士。
轉載于:https://www.cnblogs.com/yxlblogs/p/4898344.html
總結
以上是生活随笔為你收集整理的为何Redis要比Memcached好用(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌镇有什么好吃的特色美食
- 下一篇: IOS面试题(二)