工作中一旦遇到很多数据,高并发,这时就需要用到NoSQL来帮忙,NoSQL主要用到以下三种:Redis,Mongodb,Memcached。下面的表格介绍了他们之间的区别和使用场景。
对比项 | Redis | Mongodb | Memcached |
---|---|---|---|
数据存储 | Redis的存储格式和Memcache一样,也是Key-Value模式,但是Redis有另外的实现,除了基本的string类型,redis还实现了hash,list,set,zset数据类型 | MongoDB的存储格式是文档类型,是一种类型json的格式,这样有机会对某些字段建立索引,可以简单的模仿一下关系型数据库,而且MongoDB确实也有db,table的概念 | Memcache的存储格式是Key-Value模式,但是很遗憾的是,Value的格式只能是字符串,这也限制了Memcache的应用范围 |
安全验证 | Redis有权限验证,不过是全局的 | Mongo的权限验证类似RBAC,给不同的库建立了不同的账号,并分配账号权限 | Memcache没有自己的权限验证,只能通过防火墙等手段限制 |
数据有效期 | Redis可以给key添加过期时间 | MongoDB本身其实可以看作是一个数据仓库了,不存在过去时间这一说 | Memcache也是可以设置过期时间的,这里推荐使用时间戳来设置 |
数据持久化 | Redis本身支持两种持久化,快照和AOF追加方式 | MongoDB先持久化journal再持久化data | Memcached,并没有持久化功能,断电就会丢失数据 |
特色功能 | 可执行Lua脚本 | 分片,索引(使用倒排索引),可执行js脚本,单文档事务(2PC) | Slab Allocation机制,申请大块内存,分成各种大小的Chunk,大小相同的组成Slab Class |
使用场景 | 适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统 | 数据模型无法确定;QPS要求高;需要能快速水平扩展;弱事务 | 动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况 |