Mongodb 和 Memcached 不是一个范畴内的东西。Mongodb 是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。Mongodb 和 Memcached 不存在谁替换谁的问题。
Memcached 和 Redis 它们都是内存型数据库,数据保存在内存中,通过 tcp 直接存取,优势是速度快,并发高。
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
Memcached 的分布式不是在服务器端实现的,而是在客户端应用中实现的,即通过内置算法制定目标数据的节点,Memcached 的分布式是基于客户端的 Key 的 hash 来做均衡,是个伪分布式的系统。
Redis 是一个 key-value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、 list(链表)、set(集合)和 zset(有序集合)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
1、性能
总体来讲,TPS 方面 Redis 和 Memcache 差不多,要大于 Mongodb。
Redis 支持高并发量,官方宣传支持 10 万级别的并发读写。
2、操作的便利性
Memcached 数据结构单一(key-value)。
Redis 支持的数据类型更多,数据操作方面,Redis 更好一些,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络 IO 次数和数据体积,同时还提供 String、Hash、List、Set 和 Sorted Set 等数据结构的存储。
Mongodb 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
3、内存空间的大小和数据量的大小
Redis 在 2.0 版本后增加了自己的 VM 特性,突破物理内存的限制,可以限定内存使用大小,当数据超过阈值,则通过类似 LRU 的算法把内存中的最不常用数据保存到硬盘的页面文件中;可以对 key value 设置过期时间(类似 Memcached);Redis 一个 value 最大支持 512MB。
Memcached 可以修改最大可用内存,采用 LRU 算法;Memcached 单个 key-value 大小有限,一个 value 最大只支持 1MB。
MongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。
4、可靠性(持久化)
Redis 具有持久化机制,可以定期将内存中的数据持久化到硬盘上,Redis 支持(快照、AOF),依赖快照进行持久化,aof 增强了可靠性的同时,对性能有所影响。
Memcached 不支持数据持久化,断电或重启后数据消失,通常用在做缓存,提升性能。
MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。
6、数据一致性(事务支持)
Memcached 在并发场景下,用 cas 保证一致性 Redis 事务支持比较弱,只能保证事务中的每个操作连续执行。
MongoDB 不支持事务。
7、数据分析
MongoDB 内置了数据分析的功能(mapreduce),其他不支持。
8、应用场景
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统;数据量较小的更性能操作和运算,Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。
Memcached:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用 sharding)。
MongoDB:主要解决海量数据的访问效率问题。
总结:
• 没有必要过于关注性能,因为二者的性能都已经足够高了。由于 Redis 只使用单核,而 Memcached 可以使用多核,所以二者比较起来,平均每一个核上,Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis。虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
• 在内存使用效率上,如果使用简单的 key-value 存储,Memcached 的内存利用率更高。而如果 Redis 采用 hash 结构来做 key-value 存储,由于其组合式的压缩,其内存利用率会高于 Memcached。当然,这和你的应用场景和数据特性有关。
• 如果你对数据持久化和数据同步有所要求,那么推荐你选择 Redis。因为这两个特性 Memcached 都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择 Redis 也是明智的。
• 当然,最后还得说到你的具体应用需求。Redis 相比 Memcached 来说,拥有更多的数据结构,并支持更丰富的数据操作。通常在 Memcached 里,你需要将数据拿到客户端来进行类似的修改再 set 回去。这大大增加了网络 IO 的次数和数据体积。在 Redis 中,这些复杂的操作通常和一般的 GET/SET 一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么 Redis 会是不错的选择。
- B3log
-
Redis
286 引用 • 248 回帖 • 74 关注
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
-
MongoDB
90 引用 • 59 回帖 • 4 关注
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于