memcached与redis比较

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:seamon
链接:http://www.zhihu.com/question/19645807/answer/12605611
来源:知乎

它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

相比memcached:

1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。

2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。

3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。

4、redis原生支持的数据类型更多,使用的想象空间更大。

5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。

6、redis更多优点,请移步官方网站查询。

这两年Redis火得可以,Redis也常常被当作Memcached的挑战者被提到桌面上来。关于Redis与Memcached的比较更是比比皆是。然而,Redis真的在功能、性能以及内存使用效率上都超越了Memcached吗?

下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是《Is memcached a dinosaur in comparison to Redis?》(相比Redis,Memcached真的过时了吗?)

  • You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port without help from the client. Also memcached is faster with big values in the order of 100k. Redis recently improved a lot about big values (unstable branch) but still memcached is faster in this use case. The point here is: nor one or the other will likely going to be your bottleneck for the query-per-second they can deliver.
  • 没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)
  • You should care about memory usage. For simple key-value pairs memcached is more memory efficient. If you use Redis hashes, Redis is more memory efficient. Depends on the use case.
  • 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
  • You should care about persistence and replication, two features only available in Redis. Even if your goal is to build a cache it helps that after an upgrade or a reboot your data are still there.
  • 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
  • You should care about the kind of operations you need. In Redis there are a lot of complex operations, even just considering the caching use case, you often can do a lot more in a single operation, without requiring data to be processed client side (a lot of I/O is sometimes needed). This operations are often as fast as plain GET and SET. So if you don’t need just GEt/SET but more complex things Redis can help a lot (think at timeline caching).
  • 当然,最后还得说到你的具体应用需求。Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

memcached持久化可以参考新浪公司开发的第三方插件:

http://www.cnblogs.com/codersay/p/4301669.html(支持的操作较简单,慎重考虑)

时间: 2024-10-19 13:07:44

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)保障可