redis、memcache和mongodb各自的优缺点是什么
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各自的优缺点是什么的更多相关文章
- Redis.Memcache和MongoDB区别?
Memcached的优势: Memcached可以利用多核优势,单吞吐量极高,可以达到几十万QPS(取决于Key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右.)适用 ...
- Redis、Memcache、MongoDb的优缺点
Redis.Memcache.MongoDb的优缺点 Redis优点 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set ...
- 转载 NoSQL | Redis、Memcache、MongoDB特点、区别以及应用场景
NoSQL | Redis.Memcache.MongoDB特点.区别以及应用场景 2017-12-12 康哥 码神联盟 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Red ...
- memcache、mongodb、redis的对比区别
>>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...
- 关于 redis、memcache、mongoDB 的对比
从以下几个维度,对 redis.memcache.mongoDB 做了对比. 1.性能 都比较高,性能对我们来说应该都不是瓶颈. 总体来讲,TPS 方面 redis 和 memcache 差不多,要大 ...
- redis、memcache、mongoDB 做了对比
from: http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...
- 关于 redis、memcache、mongoDB 的对比(转载)
from:http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能 ...
- Redis、Memcache和MongoDB的区别
>>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...
- Redis,Memcache,mongoDB的区别
从以下几个维度,对redis.memcache.mongoDB 做了对比,欢迎拍砖 1.性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mo ...
随机推荐
- MySQL Disk--NAND Flash原理
====================================================== NAND Flash最小存储单元: 写数据操作: 通过对控制闸(Control Gate) ...
- StreamSets SDC RPC Pipelines说明
主要目的是进行跨pipeline 数据的通信,而不仅仅是内部pipeline 的通信,之间不同网络进行通信 一个参考图 pipeline 类型 origin destination 部署架构 使用多个 ...
- .NET4.0框架退休日期逐渐临近
微软宣布了.NET框架4.0至4.5.1版本的生命周期终结计划. 2016年1月12日之后,所有的技术支持,包含安全和非安全的更新补丁,都将会停止.开发人员和用户到时候可以选择回退到.NET 3.5 ...
- atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux 系统服务不同于普通视窗系统应用程式.不可能简简单单地通过执行一个EXE就启动视窗系 ...
- 利用阿里巴巴封装的FastJSON来解析json并转换成map
利用阿里巴巴封装的FastJSON来解析json并转换成map package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...
- Windows 上 Nginx 路径的陷阱
第一次用 Nginx 配置 Vhosts. 使用了 Windows 路径 C:\ww\fa\public,没有问题. 我以为 Nginx 的高级特性. 后来要建了一个 Vhosts,发现死活进不了. ...
- 实现JMS规范的ActiveMQ
ActiveMQ是Apache软件基金会的开源产品,支持AMQP协议.MQTT协议(和XMPP协议作用类似).Openwire协议和Stomp协议等多种消息协议.并且ActiveMQ完整支持JMS A ...
- Oracle GI 日志收集工具 - TFA 简介
转载自:https://blogs.oracle.com/Database4CN/entry/tfa_collector_%E4%BB%8B%E7%BB%8D 1.TFA的目的: TFA是个11.2版 ...
- python学习笔记--smtp模块的使用及常见错误处理
SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\ ...
- 执行Chrome自动化时--正在受到自动软件的控制的显示屏蔽
用selenium启动,浏览器出现‘Chrome正在受到自动软件的控制’ 屏蔽的方法: # coding:utf-8 from selenium import webdriver # 加启动配置 op ...