1、性能redis
都比較高,性能對咱們來講應該都不是瓶頸算法
整體來說,TPS方面Redis和memcache差很少,要大於MongoDBmongodb
2、操做的便利性數據庫
memcache數據結構單一(key-value)緩存
redis支持的數據類型更多,數據操做方面,Redis更好一些,也能夠在服務器端直接對數據進行豐富的操做,這樣能夠減小網絡IO次數和數據體積,同時還提供String、Hash、List、Set和Sorted Set等數據結構的存儲。 安全
mongodb支持豐富的數據表達,索引,最相似關係型數據庫,支持的查詢語言很是豐富服務器
3、內存空間的大小和數據量的大小網絡
redis在2.0版本後增長了本身的VM特性,突破物理內存的限制, 能夠限定內存使用大小,當數據超過閾值,則經過相似LRU的算法把內存中的最不經常使用數據保存到硬盤的頁面文件中;能夠對key value設置過時時間(相似memcache);Redis一個value最大支持512MB。 數據結構
memcache能夠修改最大可用內存,採用LRU算法; Memcached單個key-value大小有限,一個value最大隻支持1MB。 併發
mongoDB適合大數據量的存儲,依賴操做系統VM作內存管理,吃內存也比較厲害,服務不要和別的服務在一塊兒
4、可用性(單點問題)
redis依賴客戶端來實現分佈式讀寫;主從複製時,每次從節點從新鏈接主節點都要依賴整個快照,無增量複製,因性能和效率問題,因此單點問題比較複雜;不支持自動sharding,須要依賴程序設定一致hash機制。
一種替代方案是,不用redis自己的複製機制,採用本身作主動複製(多份存儲),或者改爲增量複製的方式(須要本身實現),一致性問題和性能的權衡
Memcache自己沒有數據冗餘機制,也不必;對於故障預防,採用依賴成熟的hash或者環狀的算法,解決單點故障引發的抖動問題。
mongoDB支持master-slave,replicaset(內部採用paxos選舉算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切分機制。
5、可靠性(持久化)
對於數據持久化和數據恢復,
redis具備持久化機制,能夠按期將內存中的數據持久化到硬盤上,Redis 支持(快照、AOF),依賴快照進行持久化,aof 加強了可靠性的同時,對性能有所影響
memcache不支持,一般用在作緩存,提高性能;
MongoDB從1.8版本開始採用binlog方式支持持久化的可靠性
6、數據一致性(事務支持)
Memcache 在併發場景下,用cas保證一致性
redis事務支持比較弱,只能保證事務中的每一個操做連續執行
mongoDB不支持事務
7、數據分析
mongoDB內置了數據分析的功能(mapreduce),其餘不支持
8、應用場景
redis:適用於對讀寫效率要求都很高,數據處理業務複雜和對安全性要求較高的系統;數據量較小的更性能操做和運算,Redis 只使用單核,而 Memcached 可使用多核,因此平均每個核上Redis在存儲小數據時比Memcached性能更高。
memcache:用於在動態系統中減小數據庫負載,提高性能;作緩存,提升性能(適合讀多寫少,對於數據量比較大,能夠採用sharding)
MongoDB:主要解決海量數據的訪問效率問題
PS:MongoDB和Redis都是NoSQL,採用結構型數據存儲。兩者在使用場景中,存在必定的區別,這也主要因爲兩者在內存映射的處理過程,持久化的處理方法不一樣。MongoDB建議集羣部署,更多的考慮到集羣方案,Redis更偏重於進程順序寫入,雖然支持集羣,也僅限於主-從模式。