1、性能 總體來講,TPS 方面 Redis 和 Memcache 差不多,要大于 Mongodb。 Redis 支持高并發量,官方宣傳支持10萬級別的并發讀寫。 2、操作的便利性 Memcached 數據結構單一(key-value)。 Redis 支持的數據類型更多,數據操作方面,Redis 更好一些,也可以在服務器端直接對數據進行豐富的操作,這樣可以減少網絡IO次數和數據體積,同時還提供String、Hash、List、Set和Sorted Set等數據結構的存儲。 Mongodb 支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富。 3、內存空間的大小和數據量的大小 Redis 在 2.0 版本后增加了自己的 VM 特性,突破物理內存的限制,可以限定內存使用大小,當數據超過閾值,則通過類似LRU的算法把內存中的最不常用數據保存到硬盤的頁面文件中;可以對 key value 設置過期時間(類似 Memcached);Redis一個value最大支持512MB。 Memcached 可以修改最大可用內存,采用 LRU 算法;Memcached單個key-value大小有限,一個value最大只支持1MB。 MongoDB 適合大數據量的存儲,依賴操作系統 VM 做內存管理,吃內存也比較厲害,服務不要和別的服務在一起。 4、可靠性(持久化) Redis 具有持久化機制,可以定期將內存中的數據持久化到硬盤上,Redis 支持(快照、AOF),依賴快照進行持久化,aof 增強了可靠性的同時,對性能有所影響。 Memcached 不支持數據持久化,斷電或重啟后數據消失,通常用在做緩存,提升性能。 MongoDB 從 1.8 版本開始采用 binlog 方式支持持久化的可靠性。 6、數據一致性(事務支持) Memcached 在并發場景下,用 cas 保證一致性Redis 事務支持比較弱,只能保證事務中的每個操作連續執行。 MongoDB 不支持事務。 7、數據分析 MongoDB 內置了數據分析的功能(maPReduce),其他不支持。 8、應用場景 Redis:適用于對讀寫效率要求都很高,數據處理業務復雜和對安全性要求較高的系統;數據量較小的更性能操作和運算,Redis 只使用單核,而 Memcached 可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。 Memcached:用于在動態系統中減少數據庫負載,提升性能;做緩存,提高性能(適合讀多寫少,對于數據量比較大,可以采用 sharding)。 MongoDB:主要解決海量數據的訪問效率問題。 總結: ? 沒有必要過于關注性能,因為二者的性能都已經足夠高了。由于Redis只使用單核,而Memcached可以使用多核,所以二者比較起來,平均每一個核上,Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高于Redis。雖然Redis最近也在存儲大數據的性能上進行優化,但是比起Memcached,還是稍有遜色。說了這么多,結論是,無論你使用哪一個,每秒處理請求的次數都不會成為瓶頸。 ? 在內存使用效率上,如果使用簡單的key-value存儲,Memcached的內存利用率更高。而如果Redis采用hash結構來做key-value存儲,由于其組合式的壓縮,其內存利用率會高于Memcached。當然,這和你的應用場景和數據特性有關。 ? 如果你對數據持久化和數據同步有所要求,那么推薦你選擇Redis。因為這兩個特性Memcached都不具備。即使你只是希望在升級或者重啟系統后緩存數據不會丟失,選擇Redis也是明智的。 ? 當然,最后還得說到你的具體應用需求。Redis相比Memcached來說,擁有更多的數據結構,并支持更豐富的數據操作。通常在Memcached里,你需要將數據拿到客戶端來進行類似的修改再set回去。這大大增加了網絡IO的次數和數據體積。在Redis中,這些復雜的操作通常和一般的GET/SET一樣高效。所以,如果你需要緩存能夠支持更復雜的結構和操作,那么Redis會是不錯的選擇。新聞熱點
疑難解答