MongoDB和Redis经常都使用到,但很多并比了解MongoDB和Redis的区别,下面重点详解MongoDB和Redis的区别。
1.内存管理机制区别
Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据存在内存,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
2.支持数据结构区别
Redis数据类型比较丰富,包括:string、hash、set、sorted set、list等。
如下图所示:
MongoDB 数据结构比较单一,MongoDB文档存储是使用BSON类型,但是支持丰富的数据表达,支持的查询语言非常丰富。
3.应用场景的区别
Redis的应用场景较多,比如:
- Redis用作缓存:由于内存的操作,可以减少数据库频繁访问读取的压力。
- Redis分布式锁:分布式锁的方案很多,基于Redis实现的分布式锁一般用得最多。
- Redis用于计数器 :基于incr原理每次访问不断累加,可以统计网站访问量,阅读量,点击量等。
- Redis用于分布式限流 :基于incr和expire原理 通过累计单位时间请求次数达到限流。
- Redis还可以用于发布订阅,类似若消息队列。
MongoDB的应用场景,比如:
- 网站数据:MongoDB 非常适合实时的插入,更新与查询;
- 用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式,非常适合文档化格式的存储及查询;
- 高伸缩性的场景:MongoDB 非常适合由数百台服务器组成的数据库,可扩展性比较强;
4.数据量和性能区别
当物理内存够用的时候,性能:redis>mongodb。
当物理内存不够用的时候,redis和mongodb都会使用虚拟内存,但是mongodb mmap的交换较少,mongodb还是能够保证性能,mongodb>redis。
5.可靠性区别
mongodb采用Journaling日志,实际上像mysql的bin log日志,通过这种方式来实现支持持久化,增加可靠性。
Redis赖快照进行持久化,采用RDB(Redis Data Base) 内存快照,以及AOF(Append Only File) 增量日志来实现持久化。
Redis4.0 后大部分的使用场景都不会单独使用 RDB 或者 AOF 来做持久化机制,而是兼顾二者的优势混合使用。
6.集群区别
MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。
以上就是6点MongoDB和Redis的区别,希望对你掌握MongoDB和Redis有所帮助。
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》