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. 《DSP using MATLAB》Problem 4.26

    Y(z)部分分式展开, 零状态响应和零输入响应的部分分式展开,

  2. Java Mail多人群发与多附件发送

        近期公司的项目用到了Java Mail来发送注冊邮件,只是.开发的时候都是使用封装好的JAR,曾经也不是非常了解Java Mail的使用原理. 网上非常多代码都是仅仅有一部分,看一看也跑不起来 ...

  3. Javascript Array 方法整理

    Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改a ...

  4. putty SSH tunnel function

    github & dynamic

  5. Centos7安装killall,fuser, killall,pstree和pstree.x11

    centos7精简安装后,使用中发现没有killall命令. 经查找,可以通过以下命令解决: yum -y install psmisc 简单介绍一下 psmisc : Psmisc软件包包含三个帮助 ...

  6. busybox下的tftp client

    # tftp -p -l file host    # put local file to remote host # tftp -g -r file host    # get remote fil ...

  7. BASIC-15_蓝桥杯_字符串对比

    示例代码: #include <stdio.h>#define N 10 int main(void){ int i = 0 ; int len1 = 0 , len2 = 0 , fla ...

  8. 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  9. 关于Qt配置编译器的问题

    PC系统:win10 安装了:Visual Studio 2017 Community ; Qt 5.8.0 运行Qt程序时,出现以下错误: 原因:来自知乎 只安装了VS2017(MSVC 15.0) ...

  10. Java5,Java 6,Java 7,Java 8新特性

    Java5: 1.泛型 Generics:        引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...