GitHub版本地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/Redis_beats_Memcached.md
Memcached还是Redis? 在现代高性能Web利用中这1直是个争辩不休的话题。 在基于关系型http://www.wfuyu.com/db/的Web利用需要提高性能时,使用缓存是绝大多数架构师的第1选择,自然,Memcached和Redis通常是优先选择。
Memcached最初在2003年由 Brad Fitzpatrick 为 LiveJournal网站开发。然后又用C语言重写了1遍(初版为Perl实现),并开放给公众使用,从此成为现代Web系统开发的基石。 当前Memcached的发展方向是改进稳定性和性能优化,而不是添加新功能特性。
Redis于2009年由 Salvatore Sanfilippo 创建, 直到今天 Sanfilippo 仍然是Redis的唯1开发者和代码保护者。 Redis也被称为 "Memcached增强版(Memcached on steroids)", 这1点也不使人惊讶, 由于 Redis 有1部份就是在 Memcached 的经验总结之上构建的的。 Redis比Memcached具有更多的功能特性,这使得它更灵活,更强大也更复杂。
Memcached和Redis被众多企业和大量生产系统所采取, 支持各种语言开发的客户端,有丰富的SDK。 事实上, 在上点范围的http://www.wfuyu.com/Internet/Web开发语言中,基本上没有不支持Memcached或Redis的。
为何Memcached和Redis如此流行? 不但是其具有超高的性能,还由于相对来讲他们都非常简单。 对http://www.wfuyu.com来讲上手使用Memcached或Redis相当容易。 安装和设置并集成到系统中可能只需要几分钟时间。 因此花费1点点时间和精力就可以立刻大幅提升系统性能 ―― 通常是提升1个数量级。 1个简洁的解决方案却能取得巨大的性能收益: 这酸爽简直超乎你的想象。
由于Redis是新兴解决方案,提供了更多的功能特性,比起Memcached来讲, Redis1般都是更好的选择。 在两个特定场景下Memcached多是更好的选择。
第1种是很细碎的静态数据,如HTML代码片断。 Memcached的内存管理不像Redis那末复杂,所以性能更高1些,缘由是Memcached 的元数据metadata更小,相对来讲额外开消就很少。 Memcached唯1支持的数据类型是字符串 String
,非常合适缓存只读数据,由于字符串不需要额外的处理。
第2个场景,是Memcached比Redis更容易水平扩大。 缘由在于它的设计和和功能很简单,Memcached更容易扩大。 消息显示, Redis在行将到来的3.0版(浏览CA版本发布笔记)将内置可靠的集群支持[但1直在跳票]。
除非受环境制约(如遗留系统),或业务符合上面的2种情况,否则你应当优先选择Redis。 使用Redis作为缓存,通过调优缓存内容,系统效力能取得极为提升。
很明显Redis的优势在于缓存管理。 缓存通过某种数据回收机制(data eviction mechanism)在必要时将旧数据从内存中删除,为新数据腾出空间。 Memcached的数据回收机制使用LRU(Least Recently Used,最近最少使用)算法,同时优先清除与新数据大小差不多的旧数据块。 相比之下,Redis允许细粒度控制过期缓存,有6种不同的策略可供选择。 Redis还采取了1些更复杂的内存管理方法和回收策略。
Redis对缓存的对象提供更大的灵活性。 而Memcached限制 key 为250字节,限制 value 为1 MB,且只能通过纯文本String通讯. Redis的 key 和 value 大小限制都是512 MB,是2进制安全的【即不丢数据,与编码无关】。 Redis提供6种数据类型,使缓存和管理缓存变得更加智能和方便,为利用程序开发者打开了1个无穷可能的世界。
相比将对象序列化后通过字符串存储, Redis 通过 Hash来存储1个对象的字段和值,并可以通过单个key来管理它们。
看看用Memcached更新1个对象需要干甚么:
并且每次更新都要干这些破事。
而使用Redis Hash的方式, 可以大幅度下降资源消耗并提高性能。 Redis的其他数据类型,如List 或 Set,可用来实现更复杂的缓存管理模式。
Redis的另外一个重大优点是其存储的数据是不透明的,这意味着在http://www.wfuyu.com/server/端可以直接操纵这些数据。 160多个命令中的大部份都可以用来进行数据操作, 所以通过服务端脚本调用进行数据处理成为现实。 这些内置命令和用户脚本可让你直接灵活地处理数据任务,而无需通过网络将数据传输给另外一个系统进行处理。
Redis提供了可选/可调剂的数据持久化, 目的是为了在 崩溃/重启后可以快速加载缓存。 虽然我们1般认为缓存中的数据是不稳定,瞬时的, 但在缓存系统中将数据持久化到磁盘还是很有价值的。 在重启后立即加载预热的方式耗时很短, 而且减轻了主http://www.wfuyu.com/db/系统的开消。
最后, Redis提供主从复制(replication)。 Replication 可用于实现高可用的cache系统,允许某些http://www.wfuyu.com/server/宕机的情况下也能提供不中断的服务。 假定要求在某台缓存http://www.wfuyu.com/server/崩溃时, 只有少部份用户和程序在短时间内受影响, 大多数情况下就需要有1个行之有效的解决方案,来保证缓存内容和服务的可用性。
现今开源软件1直在提供最好的实用技术方案。 需要使用缓存来提高利用系统性能时,Redis和Memcached是最好的产品级解决方案。 但斟酌到其丰富的功能和先进的设计,绝大多数时候Redis都应当是你的第1选择。
作者简介: Itamar Haber (@itamarhaber) 是 Redis Labs的首席开发人员, 该企业为开发人员提供完全托管的Memcached和Redis云服务。 具有多年软件产品研发经验,曾在 Xeround, Etagon, Amicada, and M.N.S Ltd.担负管理和领导职位. Itamar 取得 Northwestern and Tel-Aviv Universitiesd 的Kellogg-Recanati工商管理硕士, 和 Science in Computer Science 学士。
相干浏览:
原文链接: Why Redis beats Memcached for caching
原文日期: 2014⑴0⑴5
翻译日期: 2014⑴0⑵3
翻译人员: 铁锚