【问题标题】:Need a solution for middleware caching in C#需要 C# 中的中间件缓存解决方案
【发布时间】:2009-09-25 05:57:44
【问题描述】:

我有一个 ASP.net 应用程序,它使用我们创建的一些常见业务对象。这些业务对象也用于其他一些 Windows 服务或控制台应用程序。

我遇到的问题是,如果我有一个类“foo”和一个类“bar”并且每个都有一个函数 loadClient(),如果我调用 foo.loadClient() 和 bar.loadClient(),每个请求将命中数据库。我认为实现某种缓存会减少不必要的数据库往返。

这就是问题所在。我希望缓存特定于 ASP.net 应用程序上的每个 HTTP 请求。也就是说,一个新的请求会获得一个全新的缓存。缓存可以在其他控制台应用程序的生命周期内存在,因为其中 90% 是实用程序。

我知道我可以使用 System.Web.Cache,但我不希望我的中间件绑定到 System.Web 库。

希望能解释一下。谁能指出我正确的方向? 谢谢!

【问题讨论】:

    标签: c# asp.net caching middleware


    【解决方案1】:

    您是否在请求的生命周期内重用对象?如果不是,那么您的模型建议每个回发还将创建一组新的对象,实际上消除了对缓存的需要。通常,当对象在请求之间共享时,缓存具有价值

    就使用非 Web 特定的缓存解决方案而言,我发现 Microsoft 缓存应用程序块非常强大且易于使用。

    【讨论】:

    • 谢谢。我将看一下 MS 缓存应用程序块。我们确实启用了 System.Web.Cache 的一些使用。但是,我们希望在每次请求时从数据库中提取一些东西,尤其是在中间层。如果一个请求正在执行 5 个不同的操作,并且这些操作中的每一个都从数据库加载相同的对象,那么我希望该对象从数据库加载一次。我们有一组负载平衡的 Web 服务器,因此从数据库中多次加载一个对象,因为一个请求可能会加载不一致的数据。
    【解决方案2】:

    我认为您可以在 Velocity 项目中获得战利品。

    http://msdn.microsoft.com/en-us/data/cc655792.aspx - 有一篇简短的文章

    【讨论】:

      【解决方案3】:

      如果您正在寻找进程间缓存,那就很难了。

      但是,如果您不希望将中间件绑定到 System.Web,那么您可以编写一个接口库来充当中间件和 system.web 之间的桥梁。

      将来如果你想将它绑定到其他缓存管理器,那么你可以重写你的桥接口库,让你的中间件完全独立于实际的缓存管理器。

      【讨论】:

        【解决方案4】:

        Microsoft 推荐使用 System.Runtime.Caching.MemoryCache 代替 System.Web.Caching。它可以在 Abhijeet Patel 建议的 MS 缓存应用程序块的上下文中使用。

        见:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-26
          • 2011-03-01
          • 2019-04-16
          • 1970-01-01
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 2023-01-26
          相关资源
          最近更新 更多