189

过去几周我在 memcached 上做了很多工作,刚刚发现了 Redis。当我读到他们自述的这一部分时,我的胃里突然有一种温暖、舒适的感觉:

Redis 可以用作更强大的 memcached,因为它与 memcached 一样快,但具有更多功能。与 memcached 一样,Redis 也支持为键设置超时,以便在经过给定时间后自动删除该键。

这听起来很神奇。我还发现了这个带有基准的页面:http ://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

所以,老实说 - 与这个名为 Redis 的新人相比,从性能角度来看,memcache 真的是一个糟糕的选择吗?

我以前没有听说过很多关于 Redis 的信息,因此我的问题的方法!

4

6 回答 6

208

取决于你需要什么,总的来说,我认为:

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

没有用例现在很难选择,但我认为对于很多事情 Redis 是有意义的,因为即使你不想将它用作数据库,更有能力你可以解决更多问题,不仅是缓存,还有消息传递、排名等等。

Ps 当然我可能会有偏见,因为我是 Redis 项目的首席开发人员。

于 2011-12-13T18:40:57.143 回答
83

所以,老实说 - 与这个名为 Redis 的新人相比,从性能角度来看,memcache 真的是一个糟糕的选择吗?

  • 比较功能集则Redis具有更多功能;
  • 安装比较容易Redis也容易很多。不需要依赖;
  • 比较主动开发Redis也更好;
  • 我相信memcachedRedis. 它根本不接触光盘;
  • 我的意见是,这Redis是比 . 更好的产品memcached
于 2010-05-21T20:30:19.910 回答
74

Memcache 仍然是一个出色的工具,而且非常可靠。

与其从降低谁在 < 100 ms 范围内更快的角度来看这个问题,不如看看软件的每个“类”的性能。

  • 它只使用本地内存吗?-> 最快的
  • 它使用远程内存吗?-> 快
  • 它是否使用 ram 加硬盘 -> 哦,嗯。
  • 它是否只使用硬盘-> 运行!
于 2010-05-20T16:17:51.253 回答
47

Memcached 所做的 Redis 没有做的是将最近最少使用的值从缓存中逐出。使用 memcached,您可以安全地设置任意数量的值,当它们溢出内存时,您最近未使用的值将被删除。使用 Redis,您只能通过对所有内容设置超时来近似这一点;当它需要释放内存时,它会查看三个随机键并删除最接近到期​​的一个。

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

于 2010-06-20T20:05:32.210 回答
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 中的额外数据操作功能。

于 2010-08-26T22:46:02.707 回答
0

Hazelcast 原生支持 memcached 协议

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

因此是 memcached 的现代替代品。您应该尝试所有解决方案,看看最适合您的解决方案。

于 2014-04-16T03:57:03.250 回答