GitHub版本号地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/Redis_beats_Memcached.md

副标题: Redis是新兴的通用存储系统,而Memcached仍有其适用领域

Memcached还是Redis? 在现代高性能Web应用中这一直是个争论不休的话题。 在基于关系型数据库的Web应用须要提高性能时,使用缓存是绝大多数架构师的第一选择,自然,Memcached和Redis一般是优先选择。

共同特征

  • 都是 key-value 形式的内存数据库
  • 都是NoSQL家族的数据管理解决方式
  • 都基于相同的key-value 数据模型
  • 所有数据所有放在内存中(这也是适用于缓存的原因)
  • 性能得分不分伯仲,包含数据吞吐量和延迟等指标
  • 都是成熟的、广受开源项目欢迎的 key-value存储系统

Memcached最初在2003年由 Brad Fitzpatrick 为 LiveJournal站点开发。然后又用C语言重写了一遍(初版为Perl实现),并开放给公众使用,从此成为现代Web系统开发的基石。

当前Memcached的发展方向是改进稳定性和性能优化,而不是加入新功能特性。

Redis于2009年由 Salvatore Sanfilippo 创建, 直到今天 Sanfilippo 依旧是Redis的唯一开发人员和代码维护者。 Redis也被称为 "Memcached增强版(Memcached on steroids)", 这一点也不令人吃惊, 由于 Redis 有一部分就是在 Memcached 的经验总结之上构建的的。 Redis比Memcached具有很多其它的功能特性,这使得它更灵活,更强大也更复杂。

Memcached和Redis被众多企业以及大量生产系统所採用, 支持各种语言开发的client,有丰富的SDK。 其实, 在上点规模的互联网Web开发语言中,基本上没有不支持Memcached或Redis的。

为什么Memcached和Redis如此流行? 不仅是其具有超高的性能,还由于相对来说他们都非常easy。 对程序猿来说上手使用Memcached或Redis相当easy。 安装和设置并集成到系统中可能仅仅须要几分钟时间。 因此花费一点点时间和精力就能立马大幅提升系统性能 —— 一般是提升一个数量级。

一个简洁的解决方式却能获得巨大的性能收益: 这酸爽简直超乎你的想象。

Memcached 适用场景

由于Redis是新兴解决方式,提供了很多其它的功能特性,比起Memcached来说, Redis一般都是更好的选择。 在两个特定场景下Memcached可能是更好的选择。

第一种是非常细碎的静态数据,如HTML代码片段。 Memcached的内存管理不像Redis那么复杂,所以性能更高一些,原因是Memcached 的元数据metadata更小,相对来说额外开销就非常少。 Memcached唯一支持的数据类型是字符串 String,非常适合缓存仅仅读数据,由于字符串不须要额外的处理。

第二个场景,是Memcached比Redis更easy水平扩展。 原因在于它的设计和和功能非常easy,Memcached更easy扩展。 消息显示, Redis在即将到来的3.0版(阅读CA版本号公布笔记)将内置可靠的集群支持[但一直在跳票]。

Redis 用武之地

除非受环境制约(如遗留系统),或者业务符合上面的2种情况,否则你应该优先选择Redis。 使用Redis作为缓存,通过调优缓存内容,系统效率能获得极其提升。

非常明显Redis的优势在于缓存管理。

缓存通过某种数据回收机制(data eviction mechanism)在必要时将旧数据从内存中删除,为新数据腾出空间。 Memcached的数据回收机制使用LRU(Least Recently Used,近期最少使用)算法,同一时候优先清除与新数据大小差点儿相同的旧数据块。 相比之下,Redis同意细粒度控制过期缓存,有6种不同的策略可供选择。 Redis还採用了一些更复杂的内存管理方法和回收策略。

Redis对缓存的对象提供更大的灵活性。 而Memcached限制 key 为250字节,限制 value 为1 MB,且仅仅能通过纯文本String通信. Redis的 key 和 value 限制大小都是512 MB,是二进制安全的【即不丢数据,与编码无关】。

Redis提供6种数据类型,使缓存以及管理缓存变得更加智能和方便,为应用程序开发人员打开了一个无限可能的世界。

相比将对象序列化后通过字符串存储, Redis 通过 Hash来存储一个对象的字段和值,并能够通过单个key来管理它们。

看看用Memcached更新一个对象须要干什么:

  1. 获取整个字符串
  2. 反序列化为对象
  3. 改动当中的值
  4. 再次序列化该对象
  5. 在缓存中将整个字符串替换为新字符串

并且每次更新都要干这些破事。

而使用Redis Hash的方式, 能够大幅度减少资源消耗并提高性能。

Redis的其它数据类型,如List 或者 Set,可用来实现更复杂的缓存管理模式。

Redis的还有一个重大长处是其存储的数据是不透明的,这意味着在server端能够直接操纵这些数据。

160多个命令中的大部分都能够用来进行数据操作, 所以通过服务端脚本调用进行数据处理成为现实。

这些内置命令和用户脚本能够让你直接灵活地处理数据任务,而无需通过网络将传输数据给还有一个系统进行处理。

Redis提供了可选/可调整的数据持久化, 目的是为了在 崩溃/重新启动后能够高速载入缓存。

尽管我们一般觉得缓存中的数据是不稳定,瞬时的, 但在缓存系统中将数据持久化到磁盘还是非常有价值的。

在重新启动后马上载入预热的方式耗时非常短, 并且减轻了主数据库系统的开销。

最后, Redis提供主从复制(replication)。 Replication 可用于实现高可用的cache系统,同意某些server宕机的情况下也能提供不间断的服务。 如果要求在某台缓存server崩溃时, 仅仅有少部分用户和程序在短时间内受影响, 大多数情况下就须要有一个行之有效的解决方式,来保证缓存内容和服务的可用性。

当今开源软件一直在提供最佳的有用技术方案。 须要使用缓存来提高应用系统性能时,Redis和Memcached是最佳的产品级解决方式。 但考虑到其丰富的功能和先进的设计,绝大多数时候Redis都应该是你的第一选择。

作者简单介绍: 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-10-15

翻译日期: 2014-10-23

翻译人员: 锚的

为什么Redis比Memcached易的更多相关文章

  1. Redis,MemCached,MongoDB 概述

    调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  2. 数据库应用(Mysql、Mongodb、Redis、Memcached、CouchDB、Cassandra)

    目前,主流数据库包括关系型(SQL)和非关系型(NoSQL)两种. 关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,支持复杂的事物处理和结构化查询.代表实 ...

  3. 该用哪个:Redis与Memcached之间如何选择呢?

    华为云分布式缓存Redis5.0和Memcached都是华为云DCS的核心产品. 那么在不同的使用场景之下,如何选择Redis5.0和Memcached呢? 就由小编为大家进行详细的数据对比分析吧 R ...

  4. mongodb,redis,memcached,mysql对比

    1.性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2.操作的便利性memcache数据结构单一redis丰富一些,数据操作方面 ...

  5. 浅谈redis和memcached的区别

    缓存技术方面说到redis大家必然会联想到memcached,了解它们的人应该都知道以下几点吧 redis与 memcached相比,redis支持key-value数据类型,同事支持list.set ...

  6. Redis 对比 Memcached 并在 CentOS 下进行安装配置

    了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

  7. Redis和Memcached整体

    Redis和Memcached整体对比 Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下: 1)性能对比:由于R ...

  8. redis、memcached、mongoDB 对比与安装

    一.redis.memcached.mongoDB 对比 Memcached 和 Redis都是内存型数据库,数据保存在内存中,通过tcp直接存取,速度快,并发高.Mongodb是文档型的非关系型数据 ...

  9. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

随机推荐

  1. ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

    首先要导入AVFoundation框架及 #import <AVFoundation/AVFoundation.h>头文件 注意:要在真机上调试 下面是ipad上的调试效果 下面是代码,代 ...

  2. SQL Server定时自动抓取耗时SQL并归档数据脚本分享

    原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABA ...

  3. poj 1991 Turning in Homework dp

    这个可以证明必须从两边的任务开始交起,因为中间交的任务可以后面经过的时候再交,所以就变成了一个n*n的dp. #include <iostream> #include <cstdio ...

  4. JMX操作ActiveMQ(1)

    我们知道ActiveMQ broker的管理接口是通过JMX方式提供的. 一个简单的访问方式就是通过jconsole,输入 service:jmx:rmi:///jndi/rmi://localhos ...

  5. 服务器编程入门(10)TCP回射服务器实现 - 并发

    问题聚焦:     在前面我们大概浏览了一下服务器编程需要掌握的一些知识和技术,以及架构思想.        实践,才是检验真理的唯一标准..从这节起我们将在这些技术的基础上,一步步实现以及完善一个服 ...

  6. Java调用IIS发布的WebService

    之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...

  7. hdu3899(树形dp)

    题意:给一树,每个结点有人数,边有权值,表示经过这条边所需时间, 问取某个结点作为开会地点,所有人全部到达此结点最少所需总时间? 分析:val[u]表示以u为根节点的总人数,num[u]表示以u为根节 ...

  8. IIS7 配置 PHP5.5

    本文环境: 操作系统:Win7(x64) 中文专业版 PHP       :V5.5 首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选“Internet 信息服务”   ...

  9. UVA 10820 Send a Table euler_phi功能

    除1,1其他外国x,y不等于 为 x<y 案件 一切y有phi(y)组合 F[x]= phi(i) 2<=i<=x 结果为 2*F[x]+1 Problem A Send a Tab ...

  10. 使用SVNkit删除版本库的文件

    源网址:http://wiki.svnkit.com/Committing_To_A_Repository Editing Operation: commiting to a repository T ...