首页
文章
留言
首页
文章
留言
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使用总结
PHP开发之字符串处理
Sphinx使用总结
Python爬虫之Beautiful Soup的使用
PHP使用Kafka
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
Python
NoSQL
iOS
Nginx
Docker
Kubernetes
Git
PHP
macOS
JavaScript
Composer
Elasticsearch
Qt
Shell
Redis
Linux
OpenResty
Lua
GUI
MySQL
Objective-C
Supervisor
HTML
Android
Kafka
Sphinx
CSS
爬虫
CentOS
多线程
MongoDB
C++
热门文章
Kubernetes介绍
macOS常用命令
10种常见的软件架构模式
OpenResty+Lua+Kafka收集日志
C/C++基础知识总结
Elasticsearch详解
Nginx常用配置说明
Supervisor使用总结
Git使用总结
Docker使用总结