与.NET缓存系统相比,Memcached有哪些优势?

13
我看到开发团队中有些人使用Memcached来缓存数据库结果,而不是使用内置的 .NET Framework 缓存系统。我不清楚为什么他们会选择这个特定的缓存方式。
也许性能更好。
但无论如何,使用 Memcached(而不是本地 .NET Cache)有哪些真正的优势呢?

我会选择memcached或AppFabric,两者都支持集群以实现高可用性和容错性,正如Justin刚才提到的那样。 - Davide Piras
2个回答

25

Memcached是分布式的,关键在于这意味着如果我有一个访问缓存的服务器集群,它们都基本上从同一个缓存中读取和写入。内置的.Net缓存没有这个功能(至少我知道ASP.Net缓存没有)。

由于每台机器都有自己独立的缓存,这意味着(例如):

  • 如果机器A计算/读取一个值并将其放入缓存中,机器B将不会从中受益。每台机器都需要独立维护和填充其自己的缓存。这也可能浪费空间,因为相同的条目可能存在于许多不同机器的缓存中。
  • 如果机器B使缓存条目无效,机器A将不会意识到此次失效,并可能继续使用过时/过期的数据

Memcached没有这些问题-一旦条目被放入缓存,集群中的所有机器都可以检索相同的缓存项目。使缓存中的条目失效会使所有人都无效。

缺点

如果您的应用程序需要在一组机器上运行,则很可能会从分布式缓存中受益,但是如果您的应用程序只需要在单台机器上运行,则不会从使用分布式缓存中获得任何好处,最好使用内置的.Net缓存。

  • 访问memcached缓存需要进程间/网络通信,这会对进程内的.Net缓存产生小的性能损失。
  • Memcached作为外部进程/服务工作,这意味着您需要在生产环境中安装/运行该服务。同样,.Net缓存不需要这一步骤,因为它们是在进程中托管的。

访问 memcached 缓存需要进程间/网络通信,这会对 .Net 缓存造成一定的性能损失,因为它们是进程内的。有人对进程内和位于同一 AWA 地区/机架中的 memcached 进行过基准测试吗?我很想看看进程内 vs. Memcache vs. 数据库。 - dazbradbury

2
更合适的与Memcached进行比较的应该是Azure App Fabric Caching,它在.NET 4和Azure中添加。这是一个分布式可集群缓存解决方案,旨在为集群和云计算提供支持。然而,Memcached也已经存在了很长时间(我认为是2003年左右),因此已经非常成熟,并被认为是其他缓存解决方案的基准。Memcached也已经被移植到几乎所有语言中,并且可以在Linux或Windows服务器上运行。Azure Caching相对较新,因此还没有太多人真正使用过它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接