redis、memcahce 比较相似,但与 mongodb 完全不同,几乎没有可比性。

总的来说 redis/memcache 是基于内存的,讲究的是性能,多用作缓存层,比如说存放session。而 mongodb 是面向文档的,存储的是类似JSON的非结构化数据,查询起来非常方便,开发效率高,比较类似传统SQL关系型数据库。

普遍认为redis性能明显好于MemoryCache。所以这里主要比较 Redis 和 Mongodb。

体积

Redis是一个基于内存的键值数据库,它由C语言实现的,以单线程异步的方式工作,与Nginx/ NodeJS工作原理近似。所以文件非常小。编绎出来的主文件还不到 2Mb,在 Linux 服务器上初始只需要占用1Mb左右的内存。

Mongodb安装包则要大的多,跟mySQL差不多,都是百兆级的。

持久化

Redis是先读写内存再异步同步到磁盘,但持久化数据是需要时间的,如果每条记录都触发持久化,则性能优势则体现不出来,这里可能会产生一个问题,就是在数据改动不够多时,数据还没有持久化就重启了系统,这部分数据是有可能丢失的。

这里可以在设置文件中设置与入规则:

save 900 1
save 300 10
save 60 10000

以上规则表明,如果在1秒内发生邮900次数据发动,则开始写入到硬盘。如果10秒发生300次发动,则就持久化。

当你也可以设置成 save 1 1  每次发动都保存到硬盘,但是性能会下降。

MongoDB则不存在内存数据有可能丢失的问题,因为MongoDB每次改动都会写入数据库文件。

数据表

Redis没有严格意义上的表,习惯上一般采用 schema:key 形式做为键值,其中

schema:  可理解为传统数据库中的表名
key:     可理解为表中的主键

比如将 user:1 中的name设置为kris

HSET user:1 name kris

Mongodb则可将collection当作表

var col = db.collection('createIndexExample1');
col.find({}).toArray(function(err, items) {

});

数据写入

Redis 可以通过 hash set数据类型支持,JSON对象的写入,不过是二维的,有深层次JSON对象时,需要先序列化成string [JS代码]

client.hmset(user:1, { username: 'lee', age: '21' }, function(err) {
  console.log(err)
})

实际上执行的则是

hmset user:1 user_name lee age 21

MongoDB支持复杂结构JSON文件的写入 [JS代码]

var col = db.collection('createIndexExample1');
  col.insert([{a:1, node: {b:1}}], {w:1}, function(err, result) {
  }
});

数据查询

MongoDB支持对JSON对象的任何层次和数据进行查询,使用起来非常方便:[JS代码]

col.find({ a:1 }).toArray(function(err, items)

});

Redis 出于性能考虑,不能按照 hash object的值来搜索hash对象。

需要借助一系列的复杂操作才能进行数据查询,这一点比较接近数据库的底层。

比如我们有三条学生记录,存放着ID,名字和姓名 [redis 指令]

# 添加 3 个用户和信息

hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25

如果想要按name和age查询,则要创建相关的数据集合(set)来作为索引

# 维护age索引
sadd age:21 1
sadd age:25 2 3
# 维护name索引
sadd name:lee 1
sadd name:david 2
sadd name:chris 3

然后,求数据集交集(sinter),实现多条件查询,比如我们要名字是lee,年龄是25岁的学生

# 查找  age = 25 和 name = lee 的用户
sinter age:25 name:lee
  -> 会返回一个空集合

redis、memcache和mongodb各自的优缺点是什么的更多相关文章

  1. Redis.Memcache和MongoDB区别?

    Memcached的优势: Memcached可以利用多核优势,单吞吐量极高,可以达到几十万QPS(取决于Key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右.)适用 ...

  2. Redis、Memcache、MongoDb的优缺点

    Redis.Memcache.MongoDb的优缺点 Redis优点 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set ...

  3. 转载 NoSQL | Redis、Memcache、MongoDB特点、区别以及应用场景

    NoSQL | Redis.Memcache.MongoDB特点.区别以及应用场景 2017-12-12 康哥 码神联盟 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Red ...

  4. memcache、mongodb、redis的对比区别

    >>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...

  5. 关于 redis、memcache、mongoDB 的对比

    从以下几个维度,对 redis.memcache.mongoDB 做了对比. 1.性能 都比较高,性能对我们来说应该都不是瓶颈. 总体来讲,TPS 方面 redis 和 memcache 差不多,要大 ...

  6. redis、memcache、mongoDB 做了对比

    from: http://yang.u85.us/memcache_redis_mongodb.pdf   从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...

  7. 关于 redis、memcache、mongoDB 的对比(转载)

    from:http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能 ...

  8. Redis、Memcache和MongoDB的区别

    >>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...

  9. Redis,Memcache,mongoDB的区别

    从以下几个维度,对redis.memcache.mongoDB 做了对比,欢迎拍砖 1.性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mo ...

随机推荐

  1. Python之进程(multiprocessing)

    一.multiprocessing模块简介——进程基于“threading”的接口 multiprocessing模块支持创建进程——使用threading模块相似的API.multiprocessi ...

  2. WPF SourceInitialized 事件

    这里先介绍一个窗体的事件SourceInitialized,这个时间发生在WPF窗体的资源初始化完毕,并且可以通过WindowInteropHelper获得该窗体的句柄用来与Win32交互. 具体可以 ...

  3. mysql增删查改和alter

    盗用两篇文章吧,因为觉得别人总结的已经够好了 http://blog.csdn.net/evankaka/article/details/45580845 http://www.blogjava.ne ...

  4. C# 中的应用配置

    配置功能是软件必要的功能,下面介绍以下 Glacier 内置的配置框架,Glacier 支持三种方式的配置: appSettings 配置 嵌入的 HOCON 配置 独立的 HOCON 配置 优先级: ...

  5. ActiveMQ消息持久化存储策略

    ActiveMQ的内核是Java编写的,也就是说如果服务端没有Java运行环境ActiveMQ是无法运行的.ActiveMQ启动时,启动脚本使用wrapper包装器来启动JVM.JVM相关的配置信息在 ...

  6. 字符设备之register_chrdev与register_chrdev_region(转)

    之前写字符设备驱动,都是使用register_chrdev向内核注册驱动程序中构建的file_operations结构体,之后创建的设备文件,只要是主设备号相同(次设备号不同),则绑定的都是同一个fi ...

  7. [C++ Primer] : 第15章: 面向对象程序设计

    OOP: 概述 面向对象程序设计的核心思想是数据抽象, 继承和动态绑定. 通过数据抽象, 我们可以实现类的接口与实现的分离; 使用继承, 可以定义相似的类型并对其相似关系建模; 使用动态绑定, 可以在 ...

  8. CXF运行wsdl2java :找不到系统路径

    已经配置好cxf的环境变量出现 解决方法:一定要设置JAVA_HOME这个变量

  9. C#使用WebService 常见问题处理

    C#使用WebService   一.新建webservice 新建项目→asp.net Web服务应用程序 或者在现有项目中 点击右键 新建web服务程序asmx 只要在webservice类里面 ...

  10. WPF Demo10 嵌套Winform、RadGridView、

    <Window x:Class="控件Demo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006 ...