当前位置:  开发笔记 > 编程语言 > 正文

与Redis相比,memcached是恐龙吗?

如何解决《与Redis相比,memcached是恐龙吗?》经验,为你挑选了5个好方法。

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

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

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

所以,老实说 - 与这个名为Redis的新人相比,从性能角度来看,memcache真的是那个古老的dinousaur吗?

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



1> antirez..:

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

你不应该太在乎表演.Redis每个核心的速度更快,值很小,但是memcached能够在没有客户端帮助的情况下将多个核心与单个可执行文件和TCP端口一起使用.memcached也更快,大值为100k.Redis最近对大值(不稳定分支)进行了很多改进,但在这个用例中memcached仍然更快.这里的要点是:一个或另一个可能不会成为他们可以提供的每秒查询的瓶颈.

你应该关心内存使用情况.对于简单的键值对,memcached的内存效率更高.如果使用Redis哈希,Redis的内存效率更高.取决于用例.

您应该关注持久性和复制,这两个功能仅在Redis中可用.即使您的目标是构建缓存,在升级或重启后您的数据仍然存在也会有所帮助.

你应该关心你需要的那种操作.在Redis中有许多复杂的操作,即使只考虑缓存用例,您通常可以在单个操作中执行更多操作,而无需在客户端处理数据(有时需要大量I/O).此操作通常与普通GET和SET一样快.因此,如果您不需要GET/SET,但更复杂的事情,Redis可以提供很多帮助(想想时间线缓存).

没有用例现在很难选择,但我认为Redis有很多东西是有意义的,因为即使你不想将它用作数据库,你也可以解决更多问题,不只是缓存,甚至是消息传递,排名等等.

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


+1最后有很好的披露
我不确定这是否是一种语言错误,但如果你引用你的论点"一般来说我认为你不应该过分关注表现",这是引起关注的严重原因.Redis可能对某些类型的问题非常有用,但传统上,memcache专门用于解决持久性数据库的性能问题.我还认为你的清单中明显遗漏的是产品成熟度.Memcache是​​一个拥有大约十年经验的成熟产品.Redis很有希望,但只有3年左右的时间.

2> Alfred..:

所以,老实说 - 与这个名为Redis的新人相比,从性能角度来看,memcache真的是那个古老的dinousaur吗?

比较功能集然后Redis具有更多功能;

比较安装简便性Redis也容易得多.不需要依赖;

比较积极发展Redis也更好;

我相信memcached比它快一点Redis.它根本不接触光盘;

我认为这Redis是比产品更好的产品memcached.


如果你告诉它,redis只接触磁盘.通常,它每隔一秒左右执行一次fsync - >你不会注意到它
大差异:Memcached是多线程的,而Redis则不是.因此,虽然单个请求的延迟是可比较的,但当并发性很高时,Memcached可以提供更多的请求.另一方面,Redis只有几个并发请求才能达到它的性能峰值,因为它只使用1个cpu核心/线程.建议的绕过这种方法的方法是在具有一致散列的一台机器上运行Redis的多个实例,但这是一个非常糟糕的解决方案.因此,如果您需要高并发性并拥有多核CPU(谁没有),Memcached会更快.
另外,根据我的经验,Redis比Memcached快一点(在仅内存模式下使用Redis时).Antirez在这里做了一个测试http://antirez.com/post/redis-memcached-benchmark.html
@Alfred,Redis是单线程的并不是一个隐藏的事实,它是作者的一个设计决策(简单性超过健壮性).达斯汀与上述相关的文章是确凿的证据,表明它具有真正的影响力.我也在使用Redis作为Zend_Cache后端的基准测试中证实了这一点.随着并发性的增加,与memcached相比,Redis会相当快.

3> Daniel..:

Memcache仍然是一个很好的工具,非常可靠.

而不是从这个问题的角度来看这个问题,而不是在<100毫秒范围内找到谁更快,看一下软件的每个"类"的性能.

它只使用当地的ram吗? - >最快

它是否使用远程ram? - >快

它是否使用ram plus hardddisk - >哦hurm.

它只使用硬盘 - >运行!


我知道没有办法用memcache处理复制.Memcache纯粹是一个缓存.如果物品被清除/丢失,则需要重建.我之前没有使用过这个,也没有对它进行过评估,但这可能是您感兴趣的.http://code.google.com/p/memagent/

4> 小智..:

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

如果你只是将它用作缓存,那就是主要区别.


请参见http://antirez.com/post/redis-as-LRU-cache.html

5> HikeOnPast..:

您可能还想看看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中的额外数据操作功能.


由于Membase使用memcached协议,因此任何memcached客户端都应该工作:http://wiki.membase.org/bin/view/Main/Clients
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有