redis的优点:1、读写性能优异;2、支持数据持久化等。缺点:1、不具备自动容错和恢复功能;2、数据不能及时同步等。mongoDB的优点:1、弱一致性;2、文档结构的存储方式等。缺点:1、不支持事务操作;2、占用空间过大等。
一、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 数据库使用各种数据模型来访问和管理数据。这些类型的数据库专门针对需要大数据量、低延迟和灵活数据模型的应用程序进行了优化,这是通过放宽其他数据库的某些数据一致性限制来实现的。