Memcached、MongoDB和Redis的对比区别

MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,支持多种类型的数据结构,可用作数据库,高速缓存和消息队列代理

Memcached、MongoDB和Redis的对比区别

MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,支持多种类型的数据结构,可用作数据库,高速缓存和消息队列代理。

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,具有以下的特点,协议简单,基于libevent的事件处理,内置内存存储方式,memcached不互相通信的分布式

一、内存管理机制

Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。

MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。

Memcache 数据全部存在内存,默认使用SlabAllocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。

二、支持的数据结构

Redis 支持的数据结构丰富,包括hash、set、list等。

MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。

Memcache数据结构单一

三、数据量和性能

Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程 ,

当物理内存够用的时候,Redis>MongoDB>MySQL

当物理内存不够用的时候,Redis和MongoDB都会使用虚拟内存。

实际上如果Redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。

但是,MongoDB不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。

MongoDB还是能够保证性能。

四、性能

都比较高,性能对我们来说应该都不是瓶颈

总体来讲,TPS方面Redis和Memcache差不多,要大于MongoDB

五、可靠性

MongoDB从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;

Redis依赖快照进行持久化,AOF增强可靠性,增强可靠性的同时,影响访问性能。

Memcache不支持数据持久化,通常用在做缓存,提升性能;

可靠性上MongoDB优于Redis,Memcache。

六、数据分析

MongoDB内置数据分析功能(mapreduce);

Redis,Memcache不支持。

七、事务支持情况

Redis 事务支持比较弱,只能保证事务中的每个操作连续执行;

MongoDB不支持事务。

Memcache 在并发场景下,用cas保证一致性

八、集群

MongoDB 集群技术比较成熟,

Redis从3.0开始支持集群。

Memcached虽然能够通过分布式缓存,实现其中Memcached宕掉不会丢失全部缓存数据,但部分数据还是难逃一劫。 我们可以利用Magent代理Memcached实现主从备份来保证缓存数据完好无损,而且Magent还可以作为从继续使用,单大体工作原理如下:

1、Magent每次写数据都会写到主Memcached和从Memcached上,并且向主从Memcached写的算法一样;

2、当主Memcached宕掉,Magent会向从Memcached中读取数据。

3、当主Memcached恢复后,Magent将重新向主Memcached中读取数据;此时由于主Memcached刚刚恢复,其中并无数据,因此导致部分数据无法读取,这也是Magent的一大缺点。


参考:PHP中文网、CSDN、博客园、知乎等

上一篇:本站点JavaScript相关特效使用方法整理 下一篇:re正则表达式

评论

评论(1)

暂无评论