与Redis相比,记忆快取是恐龙吗?[关闭]


185

在过去的几周中,我与memcached进行了很多合作,并发现了有关Redis的信息。当我阅读他们的自述文件的这一部分时,我突然感到肠胃温暖,舒适:

Redis可以用作类固醇的内存缓存,因为它与内存缓存一样快,但具有更多功能。像memcached一样,Redis还支持为密钥设置超时,以便在给定的时间量过后自动删除该密钥。

听起来很棒。我还发现此页面带有基准测试:http : //www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

因此,说真的-内存缓存真的是那种旧的dinousaur,从性能的角度来看,与这个新手Redis相比,它是一个不好的选择吗?

以前我对Redis的了解很少,因此可以解决我的问题!



9
这个ruturaj基准并不是真正值得关注的地方
dsomnus 2010年

2
我们已经开始在工作中使用w / Membase进行实验,到目前为止,一切都很顺利。不过,我们来自Memcache,因此替换掉是一个不错的选择:membase.org
jayshao 2011年

2
对于非真实的人为基准,Redis的速度与内存缓存一样快。这并不是说它很慢-对于大多数工作负载来说,它肯定足够快,但是比memcached快的东西只能揭示出memcached中的错误。几乎总是由于硬件或较差的应用程序设计而成为瓶颈。
达斯汀

4
我很惊讶SO巡逻的神圣性没有解决这个问题,因为它不适当也没有帮助。
Dogweather

Answers:


74

Memcache仍然是出色的工具,非常可靠。

与其从小于100毫秒范围内更快的速度看待这个问题,不如从软件“每个类”的性能上考虑。

  • 它仅使用本地ram吗?->最快
  • 它使用远程ram吗?->快
  • 它使用ram和hardddisk吗->哦,哼。
  • 它仅使用硬盘->运行!

3
据我所知,没有工具可以处理带有Memcache的复制。Memcache纯粹是要作为缓存。如果物品被清除/丢失,则需要对其进行重建。我以前没有使用过它,也没有对其进行评估,但是您可能对此很感兴趣。 code.google.com/p/memagent
丹尼尔

1
Membase支持memcached协议,还支持持久性和复制。
Jim Ferrans 2011年

1
最近,我在4个端口上看到了绑定以太网。4 x 44MB /秒 假设您可以使用绑定以太网,这将使ram更具价值!
丹尼尔(Daniel)

1
为了将来参考,Facebook最近开放了源代码的mcrouter,它向memcached添加了复制。其他事物也都过时了(redis现在非常快,等等),但是如果您在五年之后来到这里,则仅供参考...
dannysauer 2015年

好吧,重点是什么?两者都不能存储一个简单的json数组direclty,这是Web上使用最广泛的数据交换格式,我不知道他们在想什么...哦,也许我应该添加ReJSON,因为天生就没有人关心JSON
PirateApp '17

205

取决于您的需求,我一般认为:

  • 您不应该太在意表演。Redis的每个内核使用较小的值时速度更快,但是memcached可以在没有客户端帮助的情况下使用具有单个可执行文件和TCP端口的多个内核。同样,memcached可以更快地获得大约100k的大值。Redis最近在大值(不稳定分支)方面进行了很多改进,但是在这种用例中,memcached仍然更快。这里的重点是:任何一个查询都不可以成为它们每秒提供的查询的瓶颈。
  • 您应该关心内存使用情况。对于简单的键/值对,memcached的内存效率更高。如果使用Redis哈希,则Redis的内存效率更高。取决于用例。
  • 您应该关心持久性和复制,这是Redis中仅可用的两个功能。即使您的目标是建立缓存,它也可以帮助您在升级或重新引导后仍然保留数据。
  • 您应该关心所需的操作类型。在Redis中,有很多复杂的操作,即使仅考虑缓存用例,您通常也可以在单个操作中完成更多操作,而无需在客户端处理数据(有时需要大量I / O)。此操作通常与普通GET和SET一样快。因此,如果您不仅需要GET / SET,还需要更复杂的功能,那么Redis可以提供很大帮助(请考虑使用时间线缓存)。

没有用例现在很难选择,但我认为Redis在很多方面都很有意义,因为即使您不想将它用作数据库,也可以通过使用更多功能来解决更多问题,不只是缓存,甚至是消息传递,排名等等。

附言:由于我是Redis项目的首席开发人员,因此我可能会有偏见。


67
+1为末大公开
NateDSaint

6
我不确定这是否是语言错误,但是如果您以“总体而言,我认为您不应该太在意性能”来领导自己的论点,那就是令人担忧的严重原因。Redis对于某些类型的问题可能非常有用,但是传统上,内存缓存专门用于解决持久性数据库的性能问题。我还认为,您列表中明显的遗漏是产品成熟度。Memcache是​​一款具有十年经验的成熟产品。Redis很有前途,但是已经存在了大约三年。
DougW 2012年

1
@DougW您正在使用此短语脱离上下文。当您阅读
紧随其后

83

因此,说真的-内存缓存真的是那种旧的dinousaur,从性能的角度来看,与这个新手Redis相比,它是一个不好的选择吗?

  • 比较功能集Redis可以提供更多功能;
  • 比较安装的简便性Redis也容易得多。不需要依赖项;
  • 比较积极的发展Redis也更好;
  • 我相信memcachedRedis。它根本不接触光盘。
  • 我认为那Redis是比更好的产品memcached

31
Redis仅在告诉您时才接触磁盘。通常,它每隔一秒钟执行一次fsync->您不会注意到它
Marc Seeger 2010年

1
@马克 我也相信您可以说它根本不接触光盘,但是标准的我认为它现在总是fsyncs吗?
艾尔弗雷德(Alfred)2010年

3
另外,以我的经验,Redis比Memcached快一点(在仅内存模式下使用Redis时)。Antirez在这里进行了测试antirez.com/post/redis-memcached-benchmark.html
Sune Rievers 2011年

10
大差异:Memcached是多线程的,而Redis不是。因此,尽管单个请求的延迟是可比较的,但当并发性很高时,Memcached可以处理更多的请求。另一方面,由于Redis仅使用1个cpu内核/线程,因此仅通过几个并发请求即可达到其性能峰值。建议的避免此问题的方法是在一台计算机上使用一致的哈希值运行Redis的多个实例,但这是一个非常差的解决方案。因此,如果您需要高并发性并且拥有多核CPU(不需要),那么Memcached的速度会更快。
ColinM 2012年

2
@ Alfred,Redis是单线程的并不是一个隐藏的事实,而是作者的设计决策(对鲁棒性的简单性)。上面链接的达斯汀文章,有力的证据表明它具有真正的影响。另外,在使用Redis作为Zend_Cache后端的我自己的基准测试中,我已经证实了这一点。随着并发性的增加,与内存缓存相比,Redis将很快达到稳定状态。
ColinM

46

Memcached所做的而Redis不执行的是最近最少使用的从缓存中逐出值。使用memcached,您可以安全地设置任意多个值,当它们溢出内存时,您最近未使用的值将被删除。使用Redis,您只能通过设置所有内容的超时时间来近似此值。当需要释放内存时,它将查看三个随机密钥,并删除最接近到期​​的密钥。

如果您只是将其用作缓存,则这是主要区别。



13

您可能还想看看Membase。

http://www.northscale.com/products/membase_server.html

我没有使用过它,但它似乎与Redis相似,因为它是具有持久性的以内存为中心的KV存储。我所看到的主要区别是:

  • Redis具有明显更多的数据处理能力(有序集合等)
  • Redis有一个悬而未决的Redis Cluster项目可增加水平可伸缩性
  • Redis具有基于混合算法的单层数据卸载到磁盘(VM),该算法同时考虑了LRU和对象的大小。

  • Membase使用memcached有线协议-可用作现有应用程序的升级路径

  • 使用分布式哈希表方法将Membase设置为水平扩展
  • Membase可以使用LRU方法支持多层数据卸载(很少使用到磁盘,很少使用到SSD,频繁使用的东西留在RAM中)
  • 不确定Membase中的TTL功能。

该选择可能取决于您的应用程序可以利用Redis中额外的数据处理功能的程度。


嗨,院长,谢谢你的帖子。我一定会检查出来的。我可以在PHP中使用Membase吗?
工业

4
由于Membase使用了memcached协议,因此任何memcached客户端都可以使用: wiki.membase.org/bin/view/Main/Clients
HikeOnPast 2010年

Membase支持TTL。所有Memcache实现的支持都带有到期时间。 github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.