Redis、MongoDB及Memcached的区别

Redis(内存数据库)redis

  是一个key-value存储系统(布式内缓存,高性能的key-value数据库)。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave(主从)同步。算法

MongoDB(NoSQL数据库)数据库

  是一个介于关系数据库和非关系数据库之间的产品(基于分布式文件存储的数据库),是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构很是松散,是相似json的bson格式,所以能够存储比较复杂的数据类型。Mongo最大的特色是他支持的查询语言很是强大,其语法有点相似于面向对象的查询语言,几乎能够实现相似关系数据库单表查询的绝大部分功能,并且还支持对数据创建索引。json

Memcached(内存Cache)缓存

  是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。安全

一、特色服务器

1.1 Redissession

  支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算);
  支持持久化操做,能够进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操做,较好的防止数据丢失的手段;
  支持经过Replication进行数据复制,经过master-slave机制,能够实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段;
  单线程请求,全部命令串行执行,并发状况下不须要考虑数据一致性问题;
  支持pub/sub消息订阅机制,能够用来进行消息订阅与通知;
  支持简单的事务需求,但业界使用场景不多,并不成熟。数据结构

  Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,平常环境中QPS高峰大约在1-2w左右);并发

  支持简单的事务需求,但业界使用场景不多,并不成熟,既是优势也是缺点;

  支持(快照、AOF):依赖快照进行持久化,AOF加强了可靠性的同时,对性能有所影响;

  Redis在string类型上会消耗较多内存,可使用dict(hash表)压缩存储以下降内存耗用;

  MC和Redis都是Key-Value类型,不适合在不一样数据集之间创建关系,也不适合进行查询搜索。好比redis的keys pattern这种匹配操做,对redis的性能是灾难;

  Redis在2.0版本后增长了本身的VM特性,突破物理内存的限制;能够对key value设置过时时间(相似memcache);

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

1.2 MongoDB

  适合大数据量的存储,依赖操做系统VM作内存管理,吃内存也比较厉害,服务不要和别的服务在一块儿;

  支持丰富的数据表达,索引,最相似关系型数据库,支持的查询语言很是丰富;

  支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制;

  从1.8版本开始采用binlog方式支持持久化的可靠性;

  MongoDB不支持事务;

  MongoDB内置了数据分析的功能(mapreduce),其余不支持

1.3 Memcached

  能够利用多核优点,单实例吞吐量极高,能够达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,平常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量;
  支持直接配置为session handle。

  只支持简单的key/value数据结构,不像Redis能够支持丰富的数据类型;
  没法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据所有丢失;
  没法进行数据同步,不能将MC中的数据迁移到其余MC实例中;
  内存分配采用Slab Allocation机制管理内存,value大小分布差别较大时会形成内存利用率下降,并引起低利用率时依然出现踢出等问题。须要用户注重value设计。

  Memcached能够修改最大可用内存,采用LRU算法。

二、应用场景

2.1 Redis  适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。2.2 MongoDB  主要解决海量数据的访问效率问题。2.3 Memcached  动态系统中减轻数据库负载,提高性能;作缓存,适合多读少写,大数据量的状况(如人人网大量查询用户信息、好友信息、文章信息等);  用于在动态系统中减小数据库负载,提高性能;作缓存,提升性能(适合读多写少,对于数据量比较大,能够采用sharding)。

相关文章
相关标签/搜索