`

Redis 与memcached对比

 
阅读更多
如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。memcached只支持序列化对象的存储,虽然可以存储map、list等,但是经过序列化的
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别(我个人是这么认为的)。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。
可以参考使用Redis特有内存模型前后的情况对比:


VM off: 300k keys, 4096 bytes values: 1.3G used
VM on:  300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on:  1 million keys, 256 bytes values: 160.09M used
VM on:  1 million keys, values as large as you want, still: 160.09M used

当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。

redis、memcache、mongoDB 对比
从以下几个维度,对redis、memcache、mongoDB 做了对比,欢迎拍砖
1、性能
都比较高,性能对我们来说应该都不是瓶颈
总体来讲,TPS方面redis和memcache差不多,要大于mongodb
2、操作的便利性
memcache数据结构单一
redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数
mongodb支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富
3、内存空间的大小和数据量的大小
redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)
memcache可以修改最大可用内存,采用LRU算法
mongoDB适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起
4、可用性(单点问题)
对于单点问题,
redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,
所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。
一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡
Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。
mongoDB支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
5、可靠性(持久化)
对于数据持久化和数据恢复,
redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响
memcache不支持,通常用在做缓存,提升性能;
MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性
6、数据一致性(事务支持)
Memcache 在并发场景下,用cas保证一致性
redis事务支持比较弱,只能保证事务中的每个操作连续执行
mongoDB不支持事务
7、数据分析
mongoDB内置了数据分析的功能(mapreduce),其他不支持
8、应用场景
redis:数据量较小的更性能操作和运算上
memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)
MongoDB:主要解决海量数据的访问效率问题

转自http://250688049.blog.51cto.com/643101/1132097
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    分布式缓存技术-Redis和Memcached选型对比-性能测试

    本文将深入探讨Redis与Memcached的选型对比,分析它们的性能测试结果,并探讨各自的优缺点。 Redis与Memcached都是基于NoSQL的内存数据结构存储系统,用于加速应用程序,支持亚毫秒级延迟,并且都是开源项目,用...

    Memcached Redis MongoDB对比

    Memcached、Redis和MongoDB都是流行的数据库解决方案,它们各自具有不同的特点和应用场景。以下是这三种技术之间的对比分析。 性能: 这三种数据库都具备高TPS(每秒事务处理数),意味着它们都能够处理大量的数据...

    Redis 对比 Memcached 并在 CentOS 下进行安装配置详解

    1. **Redis 与 Memcached 的区别**: - **数据类型**:Redis 支持多种数据结构,如 String、Hash、List、Set 和 Sorted Set,这使得它能够处理更复杂的数据操作。相反,Memcached 只支持简单的 String 类型。 - **...

    Redis基本原理、优化和应用示例.pdf

    - **Redis与memcached对比**:Redis与memcached类似,都是内存数据库,但Redis支持更多的数据结构和操作,可以执行事务、发布/订阅消息,且提供了持久化功能。相比之下,memcached仅提供简单的键值对存储。 - **...

    Redis从初始到集群到哨兵模式

    Redis与Memcached对比 Memcached和Redis都是流行的缓存解决方案,但是它们的设计理念和实现方式不同。 1. 数据类型:Memcached只支持String类型,而Redis支持多种数据类型。 2. 持久化:Memcached不支持持久化,而...

    Redis开发笔记.doc

    ### Redis与Memcached对比 #### 一、存储与缓存的区别 **Redis**与**Memcached**虽然都属于键值型存储系统,但两者在应用领域有着明显的差异。Redis不仅可以用作缓存,还能作为主数据库来使用。这是因为Redis具备*...

    redis介绍文档学习

    #### 四、Redis与Memcached对比 - **数据类型**:Redis支持更多的数据类型,包括列表、集合等,而Memcached仅支持简单的键值对。 - **主从复制**:Redis支持主从复制,实现数据的备份和冗余,而Memcached不支持。 -...

    Redis,快看看这40道面试题.pdf

    ### Redis与Memcached对比 5. **Redis相比Memcached的优势** - **数据结构**:Redis支持更复杂的数据结构,而Memcached仅支持字符串。 - **持久化**:Redis支持数据的持久化,而Memcached不支持。 - **主从复制*...

    redis面试题.zip

    10. **Redis与Memcached对比**:理解两者在应用场景、数据持久化、并发性能等方面的异同。 在面试中,面试官可能会询问实际问题,如Redis在实际项目中的应用、遇到的问题及解决办法,或者让你设计一个特定的Redis...

    蚂蚁中间件团队面试题:Netty+Redis+Kafka+MongoDB+分布式

    ### 分布式缓存Redis与Memcached对比 #### Redis的优势 1. **数据类型丰富**:Memcached所有的值均为简单的字符串,而Redis则支持多种数据类型,如字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted ...

    Redis相关技术总结

    #### 五、Redis与Memcached对比 1. **数据结构**:Redis支持更丰富的数据结构类型,而Memcached只支持简单的键值对存储。 2. **持久化**:Redis支持数据持久化,可以在断电后恢复数据;而Memcached主要用于缓存,不...

    传智redis笔记

    Redis与Memcached对比 - **数据类型**:Memcached仅支持字符串类型的数据,而Redis支持更为丰富的数据类型,包括但不限于字符串、哈希、列表、集合和有序集合。 - **持久化**:Memcached将所有数据存储在内存中,...

    3-13-3-redis-随堂笔记.docx

    #### 13.1.4 Redis与Memcached对比 - **Memcached** 是一个分布式内存对象缓存系统,主要用于加速动态Web应用程序通过减轻数据库负载。 - **Redis** 支持数据的持久化,即数据可以保存到硬盘上,以防服务器重启后...

    memcached完全剖析ehcache memcached redis 缓存技术总结

    标题“memcached完全剖析ehcache memcached redis 缓存技术总结”表明,这篇内容将深入探讨三种流行的缓存技术——Memcached、Ehcache和Redis。缓存是IT行业中用于提高系统性能的关键技术,尤其是在大数据量和高并发...

    46道史上最全Redis面试题

    ### Redis 与 Memcached 对比 **优势:** - **数据类型丰富:**与只能存储简单字符串的 Memcached 不同,Redis 支持更复杂的数据结构。 - **更高的性能:**尽管两者都是基于内存的操作,但 Redis 的性能通常优于 ...

    Redis基础配置笔记

    #### 二、Redis与Memcached对比 1. **存储 vs 缓存**: - **Redis**:除了可以用作缓存之外,还可以用于存储。这一特性主要是由于它具有“持久化”的功能。 - **Memcached**:主要用于缓存,不支持数据的持久化...

    Redis和Memcached的区别详解

    Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: 1.Redis支持服务器端的数据操作:...2.内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    2. **Redis与Memcached对比**:Redis支持更丰富的数据结构,如哈希、列表和集合,而Memcached仅支持字符串。 3. **数据结构与应用场景**:Redis的数据结构如字符串、哈希、列表、集合和有序集合,各有特定用途。 4...

    redis整理笔记

    ### Redis与Memcached对比 - **数据结构支持**:Redis支持更复杂的数据类型,例如列表、集合等,而Memcached主要支持简单的键值对。 - **数据持久化**:Redis支持将数据持久化到硬盘上,从而避免重启后数据丢失;而...

    Redis面试专题(二).pdf

    #### 二、Redis与Memcached对比 1. **数据类型**:Memcached只支持简单的字符串值,而Redis支持更丰富的数据类型,如列表、集合、有序集合、哈希等。 2. **性能差异**:尽管两者都运行在内存中,Redis的性能通常...

Global site tag (gtag.js) - Google Analytics