Redis、 memcache、mongodb的優缺點和應用場景總結

Redis、 memcache、mongodb的優缺點和應用場景總結

 

一、幾種緩存系統簡介:

(1)redis︰是內存型數據庫,數據保存在內存中,通過tcp直接存取,優勢是讀寫性能高。redis是內存型KV數據庫(鍵值存儲數據庫,其數據按照鍵值對的形勢進行組織、索引、存儲),不支持二級索引,支持list,set等多種數據格式。適合存儲全局變量,適合讀多寫少的業務場景。很適合做緩存。

(2)mongodb︰是文檔型的非關係型數據庫,使用bson結構。其優勢在於查詢功能比較強大,能存儲海量數據,缺點是比較消耗內存。一般可以用來存放評論等半結構化數據,支持二級索引。 適合存儲json類型數據,不經常變化。

(3)memcached︰是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。

 

二、優缺點總結:

Redis的優點:

①支持多種數據結構,如 string(字符串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數估算)

②支持持久化操作,可以進行aof及rdb數據持久化到磁盤,從而進行數據備份或數據恢復等操作,較好的防止數據丟失的手段

③支持災難恢復,主從複製。主機會自動將數據同步到從機,可以進行讀寫分離。

④支持pub/sub消息訂閱機制,可以用來進行消息訂閱與通知。

Redis的缺點:

①redis不支持自動容錯和恢復功能,主從當機都會導致前端讀寫失敗,需手動前端Ip或者機器重新啓動

②主機宕機,主從數據複製過程中,數據未完全複製到從機。會出現數據不一致。

③redis較難支持在線擴容,當集羣數據達到上限在線擴容變得複雜。

④Redis只能使用單線程,性能受限於CPU性能,故單實例CPU最高才可能達到5-6wQPS每秒。

⑤Redis在string類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用。

⑥支持簡單的事務需求,但業界使用場景很少,並不成熟。


 

Mongodb的優點:

①文檔結構的存儲方式,能夠更便捷的獲取數據。

②內置GridFS,支持大容量的存儲。

③內置Sharding,分片簡單。

④海量數據下,性能優越。

⑤支持自動故障恢復(複製集)。

Mongodb的缺點:

①不支持事務操作。

②佔用空間過大。

③mongodb沒有如MySQL那樣成熟的維護工具。

④無法進行關聯表查詢,不適用於關係多的數據。

⑤複雜聚合操作通過mapreduce創建,速度慢。

⑥ 模式自由, 自由靈活的文件存儲格式帶來的數據錯誤。


Memcached的優點:

①使用多臺memcache服務器,可以均衡請求,避免所有請求都衝進一臺memcache服務器,導致服務器掛掉。

②一臺memcache服務器的容量畢竟有限,可以使用多臺memcache服務器,增加緩存容量。

③利用memcache分佈式特性。

④Memcached可以利用多核優勢,單實例吞吐量極高,可以達到幾十萬QPS。

 

Memcached的缺點:

①無法進行持久化,數據不能備份,只能用於緩存使用,且重啓後數據全部丟失。

②存儲數據有限制:1M,大於1M,認爲就行分割,成爲內存碎片。

③只支持簡單的key/value數據結構,不像Redis可以支持豐富的數據類型。

④無法進行數據同步,不能將MC中的數據遷移到其他MC實例中。

⑤內存回收不能及時,惰性刪除

 

 

三、各自的應用場景比較

  • Redis︰場景較多,比如分佈式架構,做session共享,高速緩存。

  • Mongodb︰日誌記錄、內容管理或者博客平臺,比如評論系統。

  • Memcached︰服務器間數據共享、分佈式。

 

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