【问题标题】:How to handle BL cache for multiple web applications?如何处理多个 Web 应用程序的 BL 缓存?
【发布时间】:2011-01-31 21:30:46
【问题描述】:

我最近收到了一个项目,其中包含多个没有 MVC 结构的 Web 应用程序。对于初学者,我创建了一个包含主要业务逻辑的库 (DLL)。问题在于缓存 - 如果我使用当前的 Web 上下文缓存对象,那么我最终可能会出现重复缓存(因为每个应用程序的 Web 上下文都会不同)。

我目前正在考虑使用单例模式实现一种简单的缓存机制,该机制将允许不同的网站(也称为不同的应用程序域)共享它们的“缓存智慧”。

我想知道解决这个问题的最佳方法是什么。

编辑:我只使用一台服务器(带有多个应用程序)。

【问题讨论】:

  • 您在设计中有多少余地?您需要多少缓存?你能提供更多细节吗?我有一些想法,但我想先了解有关该问题的更多信息。
  • 假设将进行完全缓存。

标签: c# asp.net caching business-logic


【解决方案1】:

根据您的可扩展计划,我有两个不同的建议。无论您选择哪种后端缓存,我都建议您首先实现一个adapter pattern 层,该层将您从缓存中抽象出来,因此它将限制您对缓存的依赖并让您能够稍后将其换出。

如果您想通过添加 Web 场(多个应用程序服务器)进行扩展,请查看速度。微软将在 4.0 中打包它,但它目前是 CPT3 并且非常易于使用。

Documentation

Download

如果您不打算迁移到多服务器系统,那么只需使用HttpContext.Current.Cache

【讨论】:

  • HttpContext.Current.Cache 是每个应用程序,我在一台服务器上有几个应用程序 - 这意味着每个应用程序都有自己的缓存,这是我要解决的问题。
  • 那么速度就是您的(免费)答案。
【解决方案2】:

我还被推荐使用SharedCache,它看起来与我正在寻找的架构一模一样:Single Instance Caching

【讨论】:

    【解决方案3】:

    根据您要缓存的数据的类型和大小,我建议:

    1. 对于少量原始数据:nCacheD (codeplex) - memcached redux for .net
    2. 对于重量级对象:MS 模式和实践缓存块 (msdn)

    不过,总的来说,我会查看自己的需求,并确保确实需要一个包罗万象的缓存,并且编写代码来维护其状态(并调整其资源消耗)不会比直接访问缓存更昂贵数据库。 如果您要缓存的大部分内容是静态页面,或者静态和动态内容的组合,我会考虑利用 IIS/ASP.NET 的页面级缓存。

    【讨论】:

    • 如果没记错的话,nCacheD主要用于维护多台服务器之间的缓存。我只有一台带有多个应用程序的服务器,所以对于我的问题来说,这看起来有点矫枉过正。
    • memcached (checkout memcached.org) 是一个分布式的 key->value 缓存,你可以只在 1 个或任意数量的服务器上运行它。
    【解决方案4】:

    听起来你应该看看Build Better Data-Driven Apps With Distributed Caching。这篇文章描述了 Microsoft 的一种新的分布式缓存(代号为 Velocity)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2013-07-08
      • 2012-10-09
      • 2013-11-26
      • 2011-07-09
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多