為何Redis要比Memcached好用

來源:互聯網
上載者:User

標籤:style   http   io   color   os   ar   使用   sp   資料   

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更新一個對象需要幹什麼:

  1. 擷取整個字串
  2. 還原序列化為對象
  3. 修改其中的值
  4. 再次序列化該對象
  5. 在緩衝中將整個字串替換為新字串

並且每次更新都要幹這些破事。

而使用Redis Hash的方式, 可以大幅度降低資源消耗並提高效能。 Redis的其他資料類型,如List 或者 Set,可用來實現更複雜的緩衝管理員模式。

Redis 的另一個重大優點是其儲存的資料是不透明的,這意味著在伺服器端可以直接操縱這些資料。 160多個命令中的大部分都可以用來進行資料操作, 所以通過服務端指令碼調用進行資料處理成為現實。 這些內建命令和使用者指令碼可以讓你直接靈活地處理資料任務,而無需通過網路將資料轉送給另一個系統進行處理。

Redis提供了可選/可調整的資料持久化, 目的是為了在 崩潰/重啟後可以快速載入緩衝。 雖然我們一般認為緩衝中的資料是不穩定,瞬時的, 但在緩衝系統中將資料持久化到磁碟還是很有價值的。 在重啟後立即載入預熱的方式耗時很短, 而且減輕了主要資料庫系統的開銷。

最 後, Redis提供主從複製(replication)。 Replication 可用於實現高可用的cache系統,允許某些伺服器宕機的情況下也能提供不間斷的服務。 假設要求在某台快取服務器崩潰時, 只有少部分使用者和程式在短時間內受影響, 大多數情況下就需要有一個行之有效解決方案,來保證緩衝內容和服務的可用性。

當今開源軟體一直在提供最佳的實用技術方案。 需要使用緩衝來提高應用系統效能時,Redis和Memcached是最佳的產品級解決方案。 但考慮到其豐富的功能和先進的設計,絕大多數時候Redis都應該是你的第一選擇。

為何Redis要比Memcached好用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.