我们正在使用带有Redis服务器的Ruby web应用程序进行缓存。是否需要测试Memcached?

什么能给我们更好的表现?Redis和Memcached有什么优缺点吗?

需要考虑的要点:

读/写速度。内存使用情况。磁盘I/O转储。缩放比例。


当前回答

如果我们说redis是(缓存+数据结构)的组合,而memcached只是一个缓存,那就不会错。

其他回答

如果你不介意粗鲁的写作风格,从可用性的角度来看,Systoilet博客上的Redis vs Memcached值得一读,但在对性能做出任何结论之前,一定要反复阅读评论;存在一些方法上的问题(单线程忙循环测试),自本文撰写以来,Redis也做了一些改进。

没有一个基准链接是完整的,不会有点混淆,所以也可以在Dormondo的LiveJournal和Antirez Weblog上查看一些冲突的基准。

编辑——正如Antirez所指出的,Systoilet分析是相当不合理的。即使在单线程不足的情况下,这些基准测试中的大部分性能差异也可以归因于客户端库,而不是服务器吞吐量。Antirez Weblog上的基准的确提供了更多的苹果对苹果(同一张嘴)的比较。

另一个好处是,memcache在缓存场景中的行为非常清楚,而redis通常用作持久数据存储,尽管它可以被配置为在达到最大容量时像memcached一样,即驱逐最近最少使用的项目。

我研究过的一些应用程序同时使用这两种方法,只是为了明确数据的行为方式-内存缓存中的数据,我们编写代码来处理数据不存在的情况-redis中的数据。

除此之外,Redis通常被视为优势,因为它的功能更丰富,因此更灵活。

如果你对性能感兴趣,Memcached会更快,甚至因为Redis涉及网络(TCP调用)。内部Memcache也更快。

正如其他答案所提到的那样,Redis有更多的功能。

测验运行一些简单的基准测试。很长一段时间以来,我认为自己是一只老派犀牛,因为我主要使用memcached,并认为Redis是一个新孩子。

在我目前的公司中,Redis被用作主缓存。当我深入研究了一些性能统计数据并简单地开始测试时,Redis在性能方面与MySQL相当,或者说比MySQL慢得最少。

Memcached虽然过于简单,却让Redis彻底破产。它的规模更大:

对于较大的值(需要改变楼板尺寸,但已完成)对于多个并发请求

此外,在我看来,memcached驱逐策略实现得更好,从而在处理比缓存所能处理的数据更多的数据时,总体上平均响应时间更稳定。

一些基准测试表明,在我们的情况下,Redis的表现非常糟糕。我认为这与许多变量有关:

运行Redis的硬件类型存储的数据类型获取和设置的数量应用程序的并发性你需要数据结构存储吗

就我个人而言,我不同意Redis作者对并发和多线程的看法。

这是亚马逊提供的非常棒的文章/差异

与memcached相比,Redis显然是赢家。

Memcached只有一个加分项它是多线程和快速的。Redis有很多很棒的功能,速度非常快,但仅限于一个内核。

Memcached不支持Redis的优点

快照-用户可以拍摄Redis缓存的快照并在任何时间点的辅助存储。内置支持许多数据结构,如Set、Map、SortedSet、,列表、BitMaps等。在redis中支持Lua脚本