Memcached和Redis比較

1、存儲

Memcached基本只支持簡單的key-value存儲方式。
Redis除key-value以外,還支持list,set,sorted set,hash等數據結構;
Redis支持數據的備份,即master-slave模式的數據備份;
Redis支持數據的持久化(快照、AOF),能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用;
Redis能夠實現主從複製,實現故障恢復;
Redis的Sharding技術,很容易將數據分佈到多個Redis實例中。html

2、數據一致性

Memcached的cas命令在併發場景下,保證數據的一致性。
Redis事務支持比較弱,只能保證事務中的每一個操做連續執行。小程序

3、內存管理

  Memcached使用預分配的內存池的方式。使用slab和大小不一樣的chunk來管理內存,Item根據大小選擇合適的chunk存儲,內存池的方式能夠省去申請/釋放內存的開銷,而且能減少內存碎片產生,但這種方式也會帶來必定程度上的空間浪費,而且在內存仍然有很大空間時,新的數據也可能會被剔除。
  Redis使用現場申請內存的方式來存儲數據。而且不多使用free-list等方式來優化內存分配,會在必定程度上存在內存碎片,Redis跟據存儲命令參數,會把帶過時時間的數據單獨存放在一塊兒,並把它們稱爲臨時數據,非臨時數據是永遠不會被剔除的,即使物理內存不夠,致使swap也不會剔除任何非臨時數據(但會嘗試剔除部分臨時數據),這點上Redis更適合做爲存儲而不是cache。微信小程序

4、網絡IO模型

  Memcached是多線程,非阻塞IO複用的網絡模型,分爲監聽主線程和worker子線程。監聽線程監聽網絡鏈接,接受請求後,將鏈接描述字pipe傳遞給worker線程,進行讀寫IO,網絡層使用libevent封裝的事件庫。多線程模型能夠發揮多核做用,可是引入了cache coherency和鎖的問題,好比,Memcached最經常使用的stats 命令,實際Memcached全部操做都要對這個全局變量加鎖,進行計數等工做,帶來了性能損耗。
  Redis是單線程的IO複用模型,本身封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select。對於單純只有IO操做來講,單線程能夠將速度優點發揮到最大,可是Redis也提供了一些簡單的計算功能,好比排序、聚合等,對於這些操做,單線程模型實際會嚴 重影響總體吞吐量,CPU計算過程當中,整個IO調度都是被阻塞住的。安全

5、性能

兩者的性能都很高。因爲Redis只使用單核,而Memcached可使用多核,因此在比較上,平均每個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,可是比起Memcached,仍是稍有遜色。不管你使用哪個,每秒處理請求的次數都不會成爲瓶頸。微信

查看更多:
開發一個微信小程序實例教程
HTTP協議整理
PHP安全之Web攻擊
秒殺系統設計優化
MySQL優化
Linux下常見的IO模型
網絡

相關文章
相關標籤/搜索