首页
文章
留言
首页
文章
留言
Redis、MemCache、MongoDB比较
2016 年 11 月 25 日
后端
数据库
Redis
MongoDB
NoSQL
常用的三种 NoSQL 非关系数据库 - Redis、MemCache、MongoDB比较: #### 性能 从总体来看,TPS 方面 Redis 和 MemCache 差不多,Redis 略高于 MemCache,一般要都大于 MongoDB。 #### 操作的便利性 MemCache 数据结构单一,只有key-value结构。 Redis数据结构非常丰富,数据操作方面,Redis 更好一些,较少的网络 IO 次数,同时还提供 list,set, hash 等数据结构的存储,适用于队列服务、分布式操作。 MongoDB 支持丰富的数据表达、索引,最类似关系型数据库,支持的查询语言非常丰富,所以非常适用于查询操作。 ### 内存空间的大小和数据量的大小 Redis 在 2.0 版本后增加了自己的 VM 特性,突破物理内存的限制;可以对 key value 设置过期时间(类似 MemCache)。MemCache 可以修改最大可用内存,采用 LRU 算法。Memcached 代理软件 magent,比如建立 10 台 4G 的 Memcache 集群,就相当于有了 40G。 ```plaintext magent -s 10.1.2.1 -s 10.1.2.2:11211 -b 10.1.2.3:14000 ``` MongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。 #### 可靠性(持久化) 对于数据持久化和数据恢复来说,Redis 支持(快照、AOF):依赖快照进行持久化,aof 增强了可靠性的同时,对性能有所影 响 MemCache 不支持,通常用在做缓存,提升性能; MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。 #### 数据一致性(事务支持) Memcache 在并发场景下,用 cas 保证一致性。 Redis 事务支持比较弱,只能保证事务中的每个操作连续执行。 MongoDB 不支持事务。 #### 单点问题 Redis 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整 个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动 sharding,需要依赖程序设定一致 hash 机制。 一种替代方案是,不用 Redis 本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现)。 Memcache 本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的 hash 或者环状的算法,解决单点故障引起的抖动问题。 MongoDB 支持 master-slave、replicaset(内部采用 paxos 选举算法,自动故障恢复)、auto sharding 机制,对客户端屏蔽了故障转移和切分机制。 #### 应用 Redis:数据量较小的性能操作和运算上 Memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用 sharding) MongoDB:主要解决海量数据的访问效率问题。 #### 扩展 - ##### Redis与MongoDB的简单对比 - - **1、Redis** > 超快Blazing fast ,IM data structure engine,支持五种,Key-value最简单。只有Redis有事务机制。适合:不支持第二索引,在可以控制的数据库大小情况下(放得下整个内存),快速改变数据,快速写数据。案例:股票价格系统 分析,实时数据收集,联系等等。 - - **2、MongoDB** > 强迫性一致;类SQL,容易上手 , 内置分片碎片 适合:需要动态查询. 愿意事先定义索引indexes, 需要巨大的数据库有良好性能。 案例:适合90%所有 MySQL 等 RDBM 场合。 问题:数据集大于内存很慢。 MongoDB 使用 MapReduce 替代 SQL 的聚合功能进行分析,但是当前是单线程,并不可伸缩。 - ##### Redis与Memcache的简单对比 - - **1、Redis** > 支持比较多的数据类型(String/list/set/sortset/hash),Redis 支持集合计算的(set类型支持),每个key最大数据存储量为1G,Redis 是新兴的内存缓存技术,对各方面支持不完善,支持持久化操作。 - - **2、Memcache** > 老牌的内存缓存技术,对相关领域支持比较丰富,window和linux都可以使用,各种框架(tp/yii等等)都支持使用,session的信息可以非常方便的保存到该 Memcache 中,每个key保存的数据量最大为1M,支持的数据类型比较单一,就是String类型,不支持持久化。 两者的相同之处在于把数据保存在内存中。
0
相关文章
PHP开发之PDO使用总结
Sphinx使用总结
Python爬虫之Beautiful Soup的使用
Redis基本使用总结
PHP开发之字符串处理
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
OpenResty
爬虫
Objective-C
macOS
Kafka
Shell
Git
Sphinx
HTML
Redis
Qt
C++
Elasticsearch
Android
多线程
Composer
PHP
MongoDB
MySQL
Docker
Kubernetes
JavaScript
Supervisor
NoSQL
Nginx
iOS
GUI
CentOS
Linux
CSS
Lua
Python
热门文章
Redis、MemCache、MongoDB比较
macOS常用命令
OpenResty+Lua+Kafka收集日志
Nginx常用配置说明
Elasticsearch详解
Supervisor使用总结
Docker使用总结
Git使用总结
CentOS常用命令总结
Qt实现TCP通讯