【问题标题】:What are the advantages of Memcached compared to .NET Cache system?与 .NET Cache 系统相比,Memcached 有哪些优势?
【发布时间】:2011-11-12 23:30:00
【问题描述】:

我看到开发团队中的一些人使用Memcached 来缓存数据库结果,而不是内置的 .NET Framework 缓存系统。我不清楚他们为什么要使用这个特定的缓存。

也许性能更好。

无论如何,使用 Memcached(而不是原生 .NET 缓存)有什么真正的优势吗?

【问题讨论】:

  • 我会选择 memcached 或 AppFabric,两者都支持集群以实现高可用性和容错,正如 Justin 刚刚提到的那样。

标签: .net caching memcached


【解决方案1】:

Memcached 是分布式的 - 至关重要的是,这意味着如果我有一组服务器访问缓存,那么所有这些服务器本质上都是从同一个缓存读取和写入。内置的 .Net 缓存没有这个功能(至少我知道 ASP.Net 没有)。

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

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

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

缺点

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

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

【讨论】:

  • “访问 memcached 缓存需要进程间/网络通信,与进程中的 .Net 缓存相比,这会带来很小的性能损失。” -> 有没有人对进程内与 memcached(位于同一个 AWA 区域/同一个机架)进行基准测试?有兴趣查看 In-Process vs. Memcache vs. Database。
【解决方案2】:

更好的比较 Memcached 实际上是 Azure App Fabric Caching,它是在 .NET 4 和 Azure 中添加的。它是一种用于集群和云计算的分布式集群缓存解决方案。然而,Memcached 也已经存在了很长时间(我认为是 2003 年左右),所以已经很成熟,并且被认为是评判其他人的基准。 Memcached 也被移植到几乎所有的语言,并且可以在 linux 或 windows 服务器上运行。 Azure Caching 还是比较新的,所以真正使用它的人并不多。

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 2012-05-17
    • 1970-01-01
    • 2011-12-22
    • 2016-01-04
    • 2011-08-02
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多