1、性能redis
都比较高,性能对咱们来讲应该都不是瓶颈算法
整体来说,TPS方面Redis和memcache差很少,要大于MongoDBmongodb
2、操做的便利性数据库
memcache数据结构单一(key-value)缓存
redis支持的数据类型更多,数据操做方面,Redis更好一些,也能够在服务器端直接对数据进行丰富的操做,这样能够减小网络IO次数和数据体积,同时还提供String、Hash、List、Set和Sorted Set等数据结构的存储。 安全
mongodb支持丰富的数据表达,索引,最相似关系型数据库,支持的查询语言很是丰富服务器
3、内存空间的大小和数据量的大小网络
redis在2.0版本后增长了本身的VM特性,突破物理内存的限制, 能够限定内存使用大小,当数据超过阈值,则经过相似LRU的算法把内存中的最不经常使用数据保存到硬盘的页面文件中;能够对key value设置过时时间(相似memcache);Redis一个value最大支持512MB。 数据结构
memcache能够修改最大可用内存,采用LRU算法; Memcached单个key-value大小有限,一个value最大只支持1MB。 并发
mongoDB适合大数据量的存储,依赖操做系统VM作内存管理,吃内存也比较厉害,服务不要和别的服务在一块儿
4、可用性(单点问题)
redis依赖客户端来实现分布式读写;主从复制时,每次从节点从新链接主节点都要依赖整个快照,无增量复制,因性能和效率问题,因此单点问题比较复杂;不支持自动sharding,须要依赖程序设定一致hash机制。
一种替代方案是,不用redis自己的复制机制,采用本身作主动复制(多份存储),或者改为增量复制的方式(须要本身实现),一致性问题和性能的权衡
Memcache自己没有数据冗余机制,也不必;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引发的抖动问题。
mongoDB支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
5、可靠性(持久化)
对于数据持久化和数据恢复,
redis具备持久化机制,能够按期将内存中的数据持久化到硬盘上,Redis 支持(快照、AOF),依赖快照进行持久化,aof 加强了可靠性的同时,对性能有所影响
memcache不支持,一般用在作缓存,提高性能;
MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性
6、数据一致性(事务支持)
Memcache 在并发场景下,用cas保证一致性
redis事务支持比较弱,只能保证事务中的每一个操做连续执行
mongoDB不支持事务
7、数据分析
mongoDB内置了数据分析的功能(mapreduce),其余不支持
8、应用场景
redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统;数据量较小的更性能操做和运算,Redis 只使用单核,而 Memcached 可使用多核,因此平均每个核上Redis在存储小数据时比Memcached性能更高。
memcache:用于在动态系统中减小数据库负载,提高性能;作缓存,提升性能(适合读多写少,对于数据量比较大,能够采用sharding)
MongoDB:主要解决海量数据的访问效率问题
PS:MongoDB和Redis都是NoSQL,采用结构型数据存储。两者在使用场景中,存在必定的区别,这也主要因为两者在内存映射的处理过程,持久化的处理方法不一样。MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。