【问题标题】:Cache frameworks for .NET.NET 的缓存框架
【发布时间】:2011-01-23 19:02:54
【问题描述】:

我正计划开发一个 Web 服务,我需要在内存缓存中使用,有哪些不同的缓存框架可用于 .NET,我使用了 Microsoft Enterprise Library Cache 块并评估了 NCache 用于分布式环境。

我的核心要求是缓存数据的可靠性,我正在考虑使用 Enterprise Lib Cache 块 DB 数据存储来实现持久性,以防工作进程重新启动。

有什么选择吗??

【问题讨论】:

    标签: .net asp.net caching ncache


    【解决方案1】:

    您可以查看GigaSpaces XAP.NET,它是一个完全分布式的内存数据网格中的事务,可以用作许多其他东西的缓存。它也可以是您的实际应用程序服务器,它允许您以分布式方式部署您的应用程序以及分布式缓存。它是高度可用、自我修复和自我管理的网格,您可以按需横向扩展和扩展。

    免责声明 - 我为 GigaSpaces 工作。

    【讨论】:

      【解决方案2】:

      您的缓存是一个易失性数据存储,您应该编写您的软件,使其预计缓存不可用。例如

      public DtoThing GetSomeData(string parameters)
      {
         if (<check cache for data> == <not there>)
           return <get data from persistent store>
         else
           return <get data from cache>
      }
      

      如果您使用数据库作为缓存的后备存储,那么您基本上只是放弃了使用缓存的所有好处。当您说缓存需要可靠时,您是说更新需要保持一致还是数据需要始终在缓存中?如果是前者,很容易确保发生这种情况,只要您以这样一种方式编写软件,即只有一个更新数据的路径,然后该路径可以在成功执行写入持久化后使缓存无效数据存储。

      【讨论】:

      • 是的,我们可以设计一个应用程序来处理您上面建议的内容,但是对于您使用缓存仅用于存储参考数据的情况来说确实如此。如果您想将一些重要的数据存储到缓存中,而这些数据始终需要存在,该怎么办?
      • 再一次,你不直接访问缓存,你通过适当的业务逻辑层组件访问缓存的数据,它抽象了对内存缓存和持久数据存储的检查。以任何其他方式做都会失败。
      【解决方案3】:

      我有使用 Microsoft 的 Enterprise Library Cache Block 的经验,它对我来说效果很好。 EntLib 配置有时可能有点冗长,但它可以完成工作。您寻找其他东西有什么特别的原因吗?

      【讨论】:

      • 我不太确定可靠性因素,并且从未将它与 DB 一起用作数据存储。
      • 我们在生产环境中使用它,它对我们来说已经很稳定了,数据库作为数据存储。还有一个内存设置... backingStoreName="Null Storage"
      【解决方案4】:

      【讨论】:

      • 我们可以在 .NET 中使用 memcached 吗?
      • 是的,你可以,memcached 是一个服务器应用程序,你需要为它下载一个 .net 客户端。
      【解决方案5】:

      这类问题有很多潜在的解决方案。您提到了查看 NCache;如果您有时间,请查看 Oracle Coherence,这是 NCache 尝试复制的产品;-)

      不过,我的建议是,除非您需要分布式缓存的好处,否则只使用单进程内存缓存会简单得多。

      如果您好奇,请先讨论一下 NCache 的起源:http://www.theserverside.com/news/thread.tss?thread_id=43950

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        相关资源
        最近更新 更多