Caching Memcached vs.Redis?

Caching Memcached vs.Redis?,caching,web-applications,memcached,redis,Caching,Web Applications,Memcached,Redis,我们正在使用带服务器的Ruby web应用程序进行缓存。是否有一点需要测试 什么能给我们带来更好的表现?Redis和Memcached之间有什么利弊 需要考虑的要点: 读/写速度 内存使用 磁盘I/O转储 缩放 Memcached擅长于作为一个简单的键/值存储,并且擅长处理key=>STRING。这对于会话存储来说非常好 Redis擅长做key=>SOME\u对象 这真的取决于你要在里面放什么。我的理解是,就性能而言,它们相当均衡 如果您确实找到了一些客观的基准,也祝您好运,请发送给我。如果您

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

什么能给我们带来更好的表现?Redis和Memcached之间有什么利弊

需要考虑的要点:

  • 读/写速度
  • 内存使用
  • 磁盘I/O转储
  • 缩放

Memcached擅长于作为一个简单的键/值存储,并且擅长处理key=>STRING。这对于会话存储来说非常好

Redis擅长做key=>SOME\u对象

这真的取决于你要在里面放什么。我的理解是,就性能而言,它们相当均衡


如果您确实找到了一些客观的基准,也祝您好运,请发送给我。

如果您不介意粗俗的写作风格,从可用性的角度来看,Systoilet博客上的内容值得一读,但在对性能做出任何结论之前,请务必阅读评论中的前后内容;存在一些方法上的问题(单线程繁忙循环测试),自本文撰写以来,Redis也做了一些改进

没有一个基准链接是完整的,它会让事情变得有点混乱,所以也可以在和中查看一些冲突的基准

编辑——正如安特里兹指出的那样,Systoilet分析的构思相当糟糕。即使在单线程不足的情况下,这些基准测试中的许多性能差异也可以归因于客户端库,而不是服务器吞吐量。do的基准确实提供了更多的苹果对苹果(用同样的嘴)的比较。

Summary(TL;DR) 于2017年6月3日更新

Redis比memcached更强大、更受欢迎、支持更好。Memcached只能做Redis所能做的一小部分事情。即使在功能重叠的地方,Redis也更好

对于任何新内容,请使用Redis

Memcached与Redis:直接比较 这两种工具都是功能强大、快速的内存数据存储,可作为缓存使用。两者都可以通过缓存数据库结果、HTML片段或任何其他生成成本可能较高的内容来帮助加快应用程序的速度

考虑要点 当用于同一事物时,以下是它们如何使用原始问题的“要考虑的要点”进行比较:

  • 读/写速度:两者都非常快。基准测试因工作负载、版本和许多其他因素而异,但通常显示redis与memcached一样快或几乎一样快。我推荐redis,但不是因为memcached很慢。不是
  • 内存使用:Redis更好。
    • memcached:指定缓存大小,当您插入项时,守护进程会快速增长到略大于此大小。除了重新启动memcached,从来没有真正的方法可以回收这些空间。您的所有密钥都可能过期,您可以刷新数据库,但它仍将使用您配置的完整RAM块
    • redis:设置最大尺寸取决于您。Redis永远不会使用过多的内存,并且会将不再使用的内存返回给您
    • 我将100000~2KB的随机句子字符串(~200MB)存储到这两个数据库中。Memcached RAM的使用量增加到约225MB。Redis RAM的使用量增加到约228MB。在刷新了这两个内存之后,redis下降到约29MB,memcached保持在约225MB。它们在存储数据方面同样高效,但只有一个能够回收数据
  • 磁盘I/O转储:redis显然获胜,因为它默认做到这一点,并且具有非常可配置的持久性。如果没有第三方工具,Memcached没有转储到磁盘的机制
  • 扩展:在需要多个实例作为缓存之前,这两种方法都可以为您提供大量的空间。Redis提供了一些工具来帮助您超越这些,而memcached则没有
memcached Memcached是一个简单的易失性缓存服务器。它允许您存储键/值对,其中值限制为最大1MB的字符串

它在这方面做得很好,但仅此而已。您可以通过它们的键以极高的速度访问这些值,通常会使可用网络甚至内存带宽饱和

当你重新启动memcached时,你的数据就消失了。这对于缓存来说很好。你不应该在那里储存任何重要的东西

如果您需要高性能或高可用性,可以使用第三方工具、产品和服务

雷迪斯 Redis可以做与memcached相同的工作,而且可以做得更好

Redis也可以。它还可以存储键/值对。在redis中,它们甚至可以达到512MB

您可以关闭持久性,它也会在重新启动时丢失您的数据。如果您希望缓存在重新启动后仍能继续运行,它也可以让您这样做。事实上,这是默认值

它的速度也非常快,通常受到网络或内存带宽的限制

如果一个redis/memcached实例的性能不足以满足您的工作负载,那么redis显然是您的选择。Redis包括并附带了高可用性工具()“在盒子里”。在过去的几年里,redis也成为了第三方工具领域的领先者。Redis实验室、亚马逊等公司提供了许多有用的Redis工具和服务。redis周围的生态系统要大得多。大规模部署的数量现在可能比memcached的数量还要多

Redis超集 Redis不仅仅是一个缓存。它是一个内存数据结构服务器。下面,您将快速了解Redis除了作为一个简单的键/值缓存(如memcached)之外还可以做的事情。redis的大部分功能都是memcached无法实现的

文档 Redis比memcached有更好的文档记录。虽然这可能是主观的,但它似乎越来越真实

是一个很好的导航资源。它可以让你,甚至给你的生活互动的例子,每个命令在文档中

现在r的stackoverflow结果是原来的2倍
Jedis jed = new Jedis("localhost", 6379);
int count = 100000;
long startTime = System.currentTimeMillis();
for (int i=0; i<count; i++) {
  jed.set("u112-"+i, "v51"+i);
}
long endTime = System.currentTimeMillis();
System.out.println("Time taken to store "+ count + " values is ="+(endTime-startTime)+"ms");

startTime = System.currentTimeMillis();
for (int i=0; i<count; i++) {
  client.get("u112-"+i);
}
endTime = System.currentTimeMillis();
System.out.println("Time taken to retrieve "+ count + " values is ="+(endTime-startTime)+"ms");