redis和mongodb以及memcache的优缺点
-
速度快,存储在内存中,时间复杂度为O(1)
-
支持丰富的数据类型:(string,list,set,sorted set,hash)支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)。
-
支持事务,操作都是原子性.所谓原子性就是对数据的更改要么全成功要么全失败
-
丰富的特性可用于缓存,消息,按key设置过期时间,过期后会自动删除
-
支持持久化操作,可以进行aof及rdb数据持久化到硬盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
-
支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制
缺点:
-
redis只能使用单线程,性能受限于cpu性能,
-
支持简单的事务需求,不成熟,不支持回滚
-
redis在string类型上会小号较多内存,可以使用dict压缩存储以降低内存好用
Memcached优势:
-
Memcached可以利用多核优势,单实例吞吐量极高,适用于最大程度扛量。
-
支持直接配置为session handle。
-
Memecached把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
缺点:
-
数据类型比较单一
-
无法实现持久化,数据不能备份,只能用于缓存使用且重启后数据丢失
-
无法进行数据通过不,
-
需要注重value的设计
MongDB优势:
-
MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,就像SQL数据库一样灵活
-
丰富的数据表达、索引;最类似于关系数据库,支持丰富的查询语言
-
适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高
-
支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制
-
海量数据的访问效率提升<更高的写负载,MongoDB拥有更高的插入速度。
-
模式自由 :可以把不同结构的文档存储在同一个数据库里
-
面向集合的存储:适合存储 JSON风格文件的形式
-
完整的索引支持:对任何属性可索引
-
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
-
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
-
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
-
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
-
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
缺点:
-
不支持事务。
-
MongoDB占用空间过大 。
-
MongoDB没有成熟的维护工具。