Memcached和Redis比较

一、存储

Memcached基本只支持简单的key-value存储方式。
Redis除key-value之外,还支持list,set,sorted set,hash等数据结构;
Redis支持数据的备份,即master-slave模式的数据备份;
Redis支持数据的持久化(快照、AOF),可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;
Redis可以实现主从复制,实现故障恢复;
Redis的Sharding技术,很容易将数据分布到多个Redis实例中。

二、数据一致性

Memcached的cas命令在并发场景下,保证数据的一致性。 
Redis事务支持比较弱,只能保证事务中的每个操作连续执行。

三、内存管理

  Memcached使用预分配的内存池的方式。使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。
  Redis使用现场申请内存的方式来存储数据。并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

四、网络IO模型

  Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程。监听线程监听网络连接,接受请求后,将连接描述字pipe传递给worker线程,进行读写IO,网络层使用libevent封装的事件库。多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。
  Redis是单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select。对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严 重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

五、性能

二者的性能都很高。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。

查看更多:

开发一个微信小程序实例教程

HTTP协议整理

PHP安全之Web攻击

秒杀系统设计优化

MySQL优化

Linux下常见的IO模型

时间: 2025-01-04 03:01:15

Memcached和Redis比较的相关文章

Memcached、Redis OR Tair

一.前言 非关系型数据库(NoSQL = Not Only SQL)的产品非常多,常见的有Memcached.Redis.MongoDB等优秀开源项目,相关概念和资料网上也非常丰富,不再重复描述,本文主要引入Memcached和Redis与淘宝开源Tair分布式存储进行对比测试,由于各自适用场景不同,且每个产品的可配置参数繁多,涉及缓存策略.分布算法.序列化方式.数据压缩技术.通信方式.并发.超时等诸多方面因素,都会对测试结果产生影响,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何

谈谈Memcached与Redis

1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失.Memcached使用C语言开发,在大多数像Linux.BSD和Solaris等POSIX系统上,只要安装了libevent即可使用.在Windows下,它也有一个可用的非官方版本(http://code.jellyc

第三方缓存软件memcached和redis异同

memcached和redis相同点:都是以键值对的形式来存储数据,通俗讲就是一个大的hashtable缓存数据都是存在内容中 key-value 不同点:memcached:1.一个key所对应的值必须要通过客户端序列化成二进制流存储 byte[](缺点,由于序列化反序列化消耗CPU比较大)2.一个key所对应的值最大只能是1m3.传统的memcached是不支持内存数据的持久化操作,当服务器重启,数据会丢失4.可以配置读写分离5.多线程 redis: 1.一个key对应的值可以是 strin

memcached 和 redis 性能测试比对

网上很多关于memcached 和 redis 区别的介绍,大部分都是说redis比memcached支持的数据类型多的话题,而性能比对确很少,我专门针对两者进行了性能测试比对. 测试内容如下: 两者都添加5万个key-value,且value都为字符串,测试脚本为php,系统为双核处理器. 添加耗时: memcached :第一次耗时18秒,后面重复加载10次,平均耗时4.7秒.占用内存:47M   32 redis : 第一次耗时19秒,后面重复加载10次,平均用时 4.8秒. 占用内存:5

memcached与redis

Memcached VS Redis 问题:memcached 与 redis 哪个好? 答:这个问题它依赖与工程类别和它的数据. 1.它们都是内存 key/value 类型的高速与高可用的查询表. 2.它们都是集群. 3.它们都是为大项目提供内存对象而不需要去访问数据仓库. 4.访问它们,要比访问数据仓库有更快的速度. 从原理上讲: 它们的部署环境与规模架构不一样. memcached: memcached 是扁平数组 由一个hash值共享(我理解是一个hashid 决定一个扁平数组数据) r

Memcached和Redis对比和适用场景

关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memcached要丰富,能完成场景以外的事情: memcached的单个key限制在250B,value限制在1MB:redis的K.V都为512MB;当然这些值可以在源码中修改: memcached数据回收基于LRU算法,Redis提供了多种回收策略(包含LRU),但是redis的回收策的过期逻辑不可依赖

缓存技术PK:选择Memcached还是Redis?

缓存技术PK:选择Memcached还是Redis? memcached完全剖析----------------->高质量文章

缓存选型-Ehcache、memcached、Redis

缘由 今天发现有个项目访问很慢,其中一个原因就是读取oracle时慢,数据量不大,配置表忽略,业务表也就38万条记录.一个解决方案是使用缓存. 那么问题来了,用哪个缓存框架好? Ehcache 项目一直用它,不过版本可能有点低.确实很方便,就一个jar包搞过来就行.java的首选. Memcached 用c写的,比较麻烦,要安装.与java集成的资料感觉不是很多. Redis 也是要安装,虽然我装过不太麻烦,但比起Ehcache还是有点麻烦. 我的选择 看完了下面参考资料的第一篇文章,我就决定还

选择Memcached还是Redis?

两者相似之处 Memcached与Redis都属于内存内.键值数据存储方案.它们都从属于数据管理解决方案中的NoSQL家族,而且都基于同样的键值数据模型.双方都选择将全部数据保存在内存当中,这自然也就让它们成为非常理想的缓冲层实现方案.从性能表现的角度来看,两类数据存储机制也具备诸多共通性,包括拥有几乎相同的特征(与指标)表现.而且高度关注工作负载的数据吞吐量与延迟状况. 何时使用Memcached Memcached最初是由Brad Fitzpatrick于2003年开发而成. 相对Memca

key/value存储系统-Memcached、Redis、Tair

每个产品的可配置参数繁多,涉及缓存策略.分布算法.序列化方式.数据压缩技术.通信方式.并发.超时等诸多方面因素,都会对测试结果产生影响,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何评估依据,仅供参考. 1.尽管 Memcached 和 Redis 都标识为Distribute,但从Server端本身而言它们并不提供分布式的解决方案,需要Client端实现一定的分布算法将数据存储到各个节点,从而实现分布式存储,两者都提供了Replication功能(Master-Slave)保障可