一、redis的優點
1、讀寫性能優異:在 Redis 中,所有的數據都存儲在內存中,因此讀寫速度非常快,只需要幾微秒的時間就能完成一次讀寫操作。
2、支持數據持久化:支持 AOF 和 RDB 兩種持久化方式。
3、支持主從復制:主機會自動將數據同步到從機,可以進行讀寫分離。
4、數據結構豐富:支持 string、hash、set、sortedset、list 等數據結構。
二、redis的缺點
1、不具備自動容錯和恢復功能:Redis 不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的 IP 才能恢復。
2、數據不能及時同步:主機宕機,宕機前有部分數據未能及時同步到從機,切換 IP 后還會引入數據不一致的問題,降低了系統的可用性。
3、采用全量復制:Redis 的主從復制采用全量復制,復制過程中主機會 fork 出一個子進程對內存做一份快照, 并將子進程的內存快照保存為文件發送給從機,這一過程需要確保主機有足夠多的空余內存。若快照文件較大,對集群的服務能力會產生較大的影響,而且復制過程是在從機新加入集群或者從機和主機網絡斷開重連時都會進行,也就是網絡波動都會造成主機和從機間的一次全量的數據復制,這對實際的系統運營造成了不小的麻煩。
4、較難支持在線擴容:Redis 較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。
三、mongoDB的優點
1、弱一致性:弱一致性(最終一致),更能保證用戶的訪問速度。
2、文檔結構的存儲方式:文檔結構的存儲方式,能夠更便捷的獲取數。
3、內置GridFS:高效存儲二進制大對象(比如照片和視頻)。
4、內置Sharding:提供基于Range的Auto Sharding機制,一個collection可按照記錄的范圍,分成若干個段,切分到不同的Shard上。
5、第三方支持豐富:這是與其他的NoSQL相比,MongoDB也具有的優勢。
6、性能優越:在使用場合下,千萬級別的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。
四、mongoDB的缺點
1、不支持事務操作:事務要求嚴格的系統(如果銀行系統)肯定不能用它。
2、占用空間過大:mongoDB占用空間過大。
3、沒有成熟的維護工具:MongoDB沒有如MySQL那樣成熟的維護工具,這對于開發和IT運營都是個值得注意的地方。
五、redis與mongoDB的區別
1、內存管理
Redis 數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的 LRU 算法刪除數據。MongoDB 數據會優先存于內存,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。需要注意的是:Redis 和mongoDB特別消耗內存,一般不建議將它們和別的服務部署在同一臺服務器上。
2、數據結構
Redis 支持的數據結構豐富,包括hash、set、list等。MongoDB 數據結構比較單一,但是支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富。3、數據量和性能
當物理內存夠用的時候,
性能:redis>mongodb>mysql數據量:mysql>mongodb>redis注意:mongodb可以存儲文件,適合存放大量的小文件,內置了GirdFS 的分布式文件系統。
4、可靠性
mongodb 從1.8版本后,采用binlog方式(MySQL同樣采用該方式)支持持久化,增加可靠性;Redis 依賴快照進行持久化;AOF增強可靠性;增強可靠性的同時,影響訪問性能。可靠性上MongoDB優于Redis。
延伸閱讀1:NoSQL數據庫簡介
NoSQL(Not only SQL)是對不同于傳統的關系數據庫的數據庫管理系統的統稱,即廣義地來說可以把所有不是關系型數據庫的數據庫統稱為NoSQL。NoSQL 數據庫專門構建用于特定的數據模型,并且具有靈活的架構來構建現代應用程序。NoSQL 數據庫使用各種數據模型來訪問和管理數據。這些類型的數據庫專門針對需要大數據量、低延遲和靈活數據模型的應用程序進行了優化,這是通過放寬其他數據庫的某些數據一致性限制來實現的。