redis和memcached的分析總結

Memcached和Redis的區別

  •  Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等。 
  • Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,sortset,hash等數據結構的存儲。 
  • 虛擬內存: Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤 
  • 過期策略: memcache在set時就指定,例如set key_1 0 0  "Hello", 即永不過期。Redis可以通過例如expire 設定,例如expire name_1 10 
  • 存儲數據安全: memcache掛掉後,數據沒了;redis可以定期保存到磁盤(持久化) 
  • 災難恢復: memcache掛掉後,數據不可恢復; redis數據丟失後可以通過aof(類似mysql的binlog日誌)恢復 

Memcached和Redis的特點

Memcached作爲高速運行的分佈式緩存服務器,具有以下的特點: 

  • 協議簡單 
  • 基於libevent的事件處理 
  • 內置內存存儲方式 
  • memcached不互相通信的分佈式

如何實現分佈式可拓展性? 
Memcached的分佈式不是在服務器端實現的,而是在客戶端應用中實現的,即通過內置算法制定目標數據的節點,如下圖所示: 

這裏寫圖片描述

Redis作爲一個高性能的key-value數據庫具有以下特徵: 

  • 多樣的數據模型 
  • 持久化 
  • 主從同步 

       Redis支持豐富的數據類型,最爲常用的數據類型主要由五種:String、Hash、List、Set和Sorted Set。Redis通常將數據存儲於內存中,或被配置爲使用虛擬內存。Redis有一個很重要的特點就是它可以實現持久化數據,通過兩種方式可以實現數據持久化:使用RDB快照的方式,將內存中的數據不斷寫入磁盤;或使用類似MySQL的AOF日誌方式,記錄每次更新的日誌。前者性能較高,但是可能會引起一定程度的數據丟失;後者相反。 Redis支持將數據同步到多臺從數據庫上,這種特性對提高讀取性能非常有益。

Redis如何實現分佈式可拓展性? 
        2.8以前的版本:與Memcached一致,可以在客戶端實現,也可以使用代理,twitter已開發出用於Redis和Memcached的代理Twemproxy 。 
        3.0 以後的版本:相較於Memcached只能採用客戶端實現分佈式存儲,Redis則在服務器端構建分佈式存儲。Redis Cluster是一個實現了分佈式且允許單點故障的Redis高級版本,它沒有中心節點,各個節點地位一致,具有線性可伸縮的功能。如圖給出Redis Cluster的分佈式存儲架構,其中節點與節點之間通過二進制協議進行通信,節點與客戶端之間通過ascii協議進行通信。在數據的放置策略上,Redis Cluster將整個 key的數值域分成16384個哈希槽,每個節點上可以存儲一個或多個哈希槽,也就是說當前Redis Cluster支持的最大節點數就是16384。 

這裏寫圖片描述

綜合結論

  • 性能上 

     性能上都很出色,具體到細節,由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,但是比起 Memcached,還是稍有遜色。

  • 內存空間和數據量大小

MemCached可以修改最大內存,採用LRU算法。Redis增加了VM的特性,突破了物理內存的限制。

  • 操作便利上

MemCached數據結構單一,僅用來緩存數據,而Redis支持更加豐富的數據類型,也可以在服務器端直接對數據進行豐富的操作,這樣可以減少網絡IO次數和數據體積。

  • 可靠性上

MemCached不支持數據持久化,斷電或重啓後數據消失,但其穩定性是有保證的。Redis支持數據持久化和數據恢復,允許單點故障,但是同時也會付出性能的代價。

  • 應用場景 

Memcached:動態系統中減輕數據庫負載,提升性能;做緩存,適合多讀少寫,大數據量的情況(如人人網大量查詢用戶信息、好友信息、文章信息等)。 
Redis:適用於對讀寫效率要求都很高,數據處理業務複雜和對安全性要求較高的系統(如新浪微博的計數和微博發佈部分系統,對數據安全性、讀寫要求都很高)。

需要慎重考慮的部分 

  • Memcached單個key-value大小有限,一個value最大隻支持1MB,而Redis最大支持512MB 
  • Memcached只是個內存緩存,對可靠性無要求;而Redis更傾向於內存數據庫,因此對對可靠性方面要求比較高 
  • 從本質上講,Memcached只是一個單一key-value內存Cache;而Redis則是一個數據結構內存數據庫,支持五種數據類型,因此Redis除單純緩存作用外,還可以處理一些簡單的邏輯運算,Redis不僅可以緩存,而且還可以作爲數據庫用 
  • 新版本(3.0)的Redis是指集羣分佈式,也就是說集羣本身均衡客戶端請求,各個節點可以交流,可拓展行、可維護性更強大。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章