与 Redis 相比,memcached 是恐龙吗? [关闭]

Posted

技术标签:

【中文标题】与 Redis 相比,memcached 是恐龙吗? [关闭]【英文标题】:Is memcached a dinosaur in comparison to Redis? [closed] 【发布时间】:2011-02-21 19:52:58 【问题描述】:

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

Redis 可以用作内存缓存,因为它的速度与 memcached 但有一些 功能更多。 与 memcached 一样,Redis 也支持为键设置超时,因此 该密钥将自动 在给定的时间内删除 通过。

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

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

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

【问题讨论】:

有趣的补充阅读:nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis 这个 ruturaj 基准测试并不值得关注 我们已经开始在工作中使用 Membase 进行实验,到目前为止我们很开心。不过,我们来自 Memcache,因此减少替换是一个不错的选择:membase.org Redis 在非真实世界的人为基准测试中与 memcached 一样快。这并不是说它很慢——它对于大多数工作负载来说确实足够快,但是比 memcached 更快的事情只会揭示 memcached 中的错误。它几乎总是受到硬件或糟糕的应用程序设计的限制。 我很惊讶 sanctity-of-SO-patrol 并没有因为不合适和无帮助而关闭这个问题。 【参考方案1】:

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

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

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

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

【讨论】:

+1 结尾处的大量披露 我不确定这是否是一个语言错误,但如果你以“总的来说我认为你不应该太在意性能”来引导你的论点,那就值得关注了。 Redis 可能非常适合某些类别的问题,但传统上,memcache 专门用于解决持久性数据库的性能问题。我还认为您的清单中一个明显的遗漏是产品成熟度。 Memcache 是一个成熟的产品,拥有大约十年的经验。 Redis 很有前途,但才出现了 3 年左右。 @DougW 你把这句话断章取义了。当您阅读紧随其后结束该段落的短语时,这会更有意义:“这里的重点是:任何一个都不会成为他们可以提供的每秒查询的瓶颈”【参考方案2】:

所以,老实说 - memcache 真的是这样吗? 老恐龙,这是一个糟糕的选择 从性能的角度来看,当 比起这个叫 Redis?

比较功能集然后Redis 具有更多功能; 比较易于安装Redis 也容易很多。无需依赖; 比较主动开发Redis也更好; 我相信memcachedRedis 快一点。它根本不接触光盘; 我认为Redismemcached 更好。

【讨论】:

redis 只有在你告诉它时才会接触磁盘。通常,它每隔一秒左右执行一次 fsync -> 你不会注意到它 @Marc 是的。我也相信你可以告诉它根本不碰光盘,但标准我相信它现在总是 fsyncs? 另外,根据我的经验,Redis 比 Memcached 快一点(在仅内存模式下使用 Redis 时)。 Antirez 在这里做了一个测试antirez.com/post/redis-memcached-benchmark.html 大不同:Memcached 是多线程的,而 Redis 不是。因此,虽然单个请求的延迟是可比的,但 Memcached 在并发高时可以服务更多的请求。另一方面,Redis 只需几个并发请求即可达到其性能峰值,因为它仅使用 1 个 cpu 核心/线程。建议的规避方法是在一台机器上运行多个 Redis 实例并使用一致的散列,但这是一个非常糟糕的解决方案。因此,如果您需要高并发并拥有多核 CPU(谁不需要),Memcached 会快得多。 @Alfred,Redis 是单线程的并不是隐藏的事实,它是作者的设计决策(简单性优于健壮性)。上面链接到的文章达斯汀是确凿的证据,证明它具有真正的影响。我也在我自己的基准测试中确认了这一点,使用 Redis 作为 Zend_Cache 后端;与 memcached 相比,随着并发性的增加,Redis 将很快达到稳定水平。【参考方案3】:

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

不要从低于 100 毫秒范围内谁更快的角度来看待这个问题,而是看看软件的每个“类”的性能。

它只使用本地内存吗? -> 最快的 它是否使用远程内存? -> 快 它是否使用 ram 加硬盘 -> 哦,哎呀。 它是否只使用硬盘 -> 运行!

【讨论】:

据我所知,没有使用 memcache 处理复制的工具。 Memcache 纯粹是一个缓存。如果项目被清除/丢失,则需要重建。我以前没有使用过它,也没有评估过它,但这可能会让你感兴趣。 code.google.com/p/memagent Membase 支持 memcached 协议,也支持持久性和复制。 最近我看到了绑定以太网,跨 4 个端口。 4 x 44MB/秒。假设您可以启动绑定的以太网,这会使 ram 更有价值! 为了以后参考,Facebook最近开源了mcrouter,增加了对memcached的复制。其他东西也过时了(redis 现在超级快,等等),但仅供参考,如果你五年后在这里...... 那么重点是什么?两者都不能直接存储一个简单的 json 数组,这是网络上使用最广泛的数据交换格式,我不知道他们在想什么……哦,等等,也许我应该添加 ReJSON,因为世界上本来就没有人关心 JSON,对 【参考方案4】:

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

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

【讨论】:

见antirez.com/post/redis-as-LRU-cache.html【参考方案5】:

您可能还想查看 Membase。

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

我没用过,但是它看起来和 Redis 很像,都是以内存为中心的具有持久性的 KV 存储。与我所看到的主要区别是:

Redis 具有明显更多的数据操作能力(有序集等) Redis 有一个待定的 Redis 集群项目以增加水平可扩展性

Redis 具有基于混合算法的单层数据卸载到磁盘 (VM),该算法同时考虑了 LRU 和对象的大小。

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

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

选择可能取决于您的应用程序可以在多大程度上利用 Redis 中的额外数据操作功能。

【讨论】:

嗨,院长,感谢您的帖子。我一定会检查出来的。我可以在 php 中使用 Membase 吗? 由于 Membase 使用 memcached 协议,任何 memcached 客户端都应该工作:wiki.membase.org/bin/view/Main/Clients Membase 支持 TTL。所有 Memcache 实现都支持带有过期时间的 put。 github.com/memcached/memcached/blob/master/doc/protocol.txt#L79【参考方案6】:

Hazelcast 原生支持 memcached 协议

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

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

【讨论】:

以上是关于与 Redis 相比,memcached 是恐龙吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

redis与memcached有什么区别

Redis相比memcached有哪些优势?

Redis与Memcached区别?Redis线程模型?

redis连环夺命问

redis与memcached对比

redis与memcached区别