谢邀,mongodb不应和redis/memcache比较,因为两者的适用场景是完全不同的。
mongodb是一款介于内存数据库和关系数据库的数据库,是高性能、无模式的文档型数据库。
mongodb数据存储在磁盘,只有在需要时通过mmap映射到内存,在内存中修改,修改完毕由操作系统负责flush到磁盘。
优点:支持复杂的数据结构,能存储海量的数据,能提供类似关系数据库般强大的查询。
redis是一个开源的key-value存储系统,所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。仅支持key、string、hash、list、set几种结构,优点:读写速度非常快。缺点:受内存限制无法存储过多的数据,也无法提供强大的查询,只使用单核。
memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。memcache仅支持简单的key-value结构,但使用多核。
在爬虫中,经常采用redis+mongodb的方式,Mongodb用于存储爬取的海量的数据,而redis则用于去重和保存待爬取的url。
redis V memcache:
1:Redis支持服务器端的数据操作,而在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去;
2:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached;
3:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis;
4:Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB;
5:Memcached只是一个单一key-value内存Cache,而Redis则是一个数据结构内存数据库,支持五种数据类型
6:Memcached只能作为缓存,Redis不仅可以缓存,而且还可以作为数据库用。
除了某些功能外,Redis可以视为Memcached的扩展。