Redis與Memcached的比較)

來源:互聯網
上載者:User

1.網路IO模型

  Memcached是多線程,非阻塞IO複用的網路模型,分為監聽主線程和worker子線程,監聽線程監聽網路連接,接受請求後,將串連描述字pipe 傳遞給worker線程,進行讀寫IO, 網路層使用libevent封裝的事件庫,多執行緒模式可以發揮多核作用,但是引入了cache coherency和鎖的問題,比如,Memcached最常用的stats 命令,實際Memcached所有操作都要對這個全域變數加鎖,進行計數等工作,帶來了效能損耗。

(Memcached網路IO模型)

  Redis使用單線程的IO複用模型,自己封裝了一個簡單的AeEvent事件處理架構,主要實現了epoll、kqueue和select,對於單純只有IO操作來說,單線程可以將速度優勢發揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、彙總等,對於這些操作,單執行緒模式實際會嚴重影響整體輸送量,CPU計算過程中,整個IO調度都是被阻塞住的。

  2.記憶體管理方面

  Memcached使用預分配的記憶體池的方式,使用slab和大小不同的chunk來管理記憶體,Item根據大小選擇合適的chunk儲存,記憶體池的方式可以省去申請/釋放記憶體的開銷,並且能減小記憶體片段產生,但這種方式也會帶來一定程度上的空間浪費,並且在記憶體仍然有很大空間時,新的資料也可能會被剔除,原因可以參考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/

  Redis使用現場申請記憶體的方式來儲存資料,並且很少使用free-list等方式來最佳化記憶體配置,會在一定程度上存在記憶體片段,Redis跟據儲存命令參數,會把帶到期時間的資料單獨存放在一起,並把它們稱為臨時資料,非臨時資料是永遠不會被剔除的,即便實體記憶體不夠,導致swap也不會剔除任何非臨時資料(但會嘗試剔除部分臨時資料),這點上Redis更適合作為儲存而不是cache。

  3.資料一致性問題

  Memcached提供了cas命令,可以保證多個並發訪問操作同一份資料的一致性問題。 Redis沒有提供cas 命令,並不能保證這點,不過Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。

  4.儲存方式及其它方面

  Memcached基本只支援簡單的key-value儲存,不支援枚舉,不支援持久化和複製等功能

  Redis除key/value之外,還支援list,set,sorted set,hash等眾多資料結構,提供了KEYS

  進行枚舉操作,但不能線上上使用,如果需要枚舉線上資料,Redis提供了工具可以直接掃描其dump檔案,枚舉出所有資料,Redis還同時提供了持久化和複製等功能。

  5.關於不同語言的用戶端支援

  在不同語言的用戶端方面,Memcached和Redis都有豐富的第三方用戶端可供選擇,不過因為Memcached發展的時間更久一些,目前看在用戶端支援方面,Memcached的很多用戶端更加成熟穩定,而Redis由於其協議本身就比Memcached複雜,加上作者不斷增加新的功能等,對應第三方用戶端跟進速度可能會趕不上,有時可能需要自己在第三方用戶端基礎上做些修改才能更好的使用。

  根據以上比較不難看出,當我們不希望資料被踢出,或者需要除key/value之外的更多資料類型時,或者需要落地功能時,使用Redis比使用Memcached更合適。

  關於Redis的一些周邊功能

  Redis除了作為儲存之外還提供了一些其它方面的功能,比如彙總計算、pubsub、scripting等,對於此類功能需要瞭解其實現原理,清楚地瞭解到它的局限性後,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支援的,消費方串連閃斷或重連之間過來的訊息是會全部丟失的,又比如彙總計算和scripting等功能受Redis單執行緒模式所限,是不可能達到很高的輸送量的,需要謹慎使用。

  總的來說Redis作者是一位非常勤奮的開發人員,可以經常看到作者在嘗試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入瞭解後再使用。

  總結:

  1.Redis使用最佳方式是全部資料in-memory。

  2.Redis更多情境是作為Memcached的替代者來使用。

  3.當需要除key/value之外的更多資料類型支援時,使用Redis更合適。

  4.當儲存的資料不能被剔除時,使用Redis更合適。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.