這裡我主要談談memcache和redis的差別。
①從資料存儲位置上來分,memcache的資料存在記憶體中,而redis既可以存儲在記憶體中,也可以存儲的到磁盤中,達到持久化存儲的功能,memcache一旦斷電,資料全部丢失,redis可以利用快照和AOF把資料存到磁盤中,當恢複時又從磁盤中讀取到記憶體中,當實體記憶體使用完畢後,可以把資料寫入到磁盤中。
②從存儲資料的類型上來分,memcache和redis存儲的方式都是鍵值對,隻不過redis值的類型比較豐富,有string(字元串),hash(哈希),list(清單),set(集合)zset(有序集合),而memcache主要存儲的是字元串。
③從架構層次來分,Redis支援master-slave(主—從)模式應用,memcache支援分布式。
④另外從存儲資料的大小上來分,Redis單個value的最大限制是1GB,memcached隻1能儲存1MB的資料。但是Memcache在存儲100K以上的資料,性能稍微好一點。
⑤另外redis隻支援單核,memcache可以支援多核,當然關于redis取代memcache的說法,在一般情況下,兩者性能都很高,在大多的業務場景選擇上,redis的選擇可能更加具有優勢,但也不能說可以完全取代,最終還是取決于你的應用場景。
redis中
優點:
1讀寫性能優異
2支援資料持久化,支援AOF和RDB兩種持久化方式
3支援主從複制,主機會自動将資料同步到從機,可以進行讀寫分離。
4.豐富的特性 pub/sub,key過期政策,事務,支援多個DB等。
5資料結構豐富:除了支援string類型的value外還支援string、hash、set、sortedset、list等資料結構。
缺點:
1Redis不具備自動容錯和恢複功能,主機從機的當機都會導緻前端部分讀寫請求失敗,需要等待機器重新開機或者手動切換前端的IP才能恢複。
2主機當機,當機前有部分資料未能及時同步到從機,切換IP後還會引入資料不一緻的問題,降低了系統的可用性。
3Redis的主從複制采用全量複制,複制過程中主機會fork出一個子程序對記憶體做一份快照,并将子程序的記憶體快照儲存為檔案發送給從機,這一過程需要確定主機有足夠多的空餘記憶體。若快照檔案較大,對叢集的服務能力會産生較大的影響,而且複制過程是在從機新加入叢集或者從機和主機網絡斷開重連時都會進行,也就是網絡波動都會造成主機和從機間的一次全量的資料複制,這對實際的系統營運造成了不小的麻煩。
4Redis較難支援線上擴容,在叢集容量達到上限時線上擴容會變得很複雜。為避免這一問題,運維人員在系統上線時必須確定有足夠的空間,這對資源造成了很大的浪費。
memache
優點
一.部分容災
假設隻用一台memcache,如果這台memcache伺服器挂掉了,那麼請求将不斷的沖擊資料庫,這樣有可能搞死資料庫,進而引發”雪崩“。如果使用多台memcache伺服器,由于memcache使用一緻性雜湊演算法,萬一其中一台挂掉了,部分請求還是可以在memcache中命中,為修複系統赢得一些時間。
二.容量問題
一台memcache伺服器的容量畢竟有限,可以使用多台memcache伺服器,增加緩存容量。
三.均衡請求
使用多台memcache伺服器,可以均衡請求,避免所有請求都沖進一台memcache伺服器,導緻伺服器挂掉。
四.利用memcache分布式特性
使用一台memcache伺服器,并沒有利用memcache的資料分布式特性。
缺點
1.不能持久化存儲
2.存儲資料有限制:1M 【大于1M,認為就行分割】(記憶體碎片)
3.mm存儲資料隻能key-value
4.叢集資料沒有複制和同步機制 【崩潰不會影響程式,會從資料庫中取資料】
5.記憶體回收不能及時 LRU(算法):未使用記憶體》過期記憶體》最近最少使用記憶體 這是惰性删除
以上内容些許轉自 msdnWoo 望見諒。