C# 需要在C中为中间件缓存提供解决方案吗#

C# 需要在C中为中间件缓存提供解决方案吗#,c#,asp.net,caching,middleware,C#,Asp.net,Caching,Middleware,我有一个ASP.net应用程序,它使用我们创建的一些常见业务对象。这些业务对象也用于其他一些windows服务或控制台应用程序中 我遇到的问题是,如果我有一个类“foo”和一个类“bar”,并且每个类都有一个函数loadClient(),如果我调用foo.loadClient()和bar.loadClient(),每个请求都会命中数据库。我认为实现某种缓存可以减少到数据库的不必要的往返 这是陷阱。我希望缓存特定于ASP.net应用程序中的每个HTTP请求。也就是说,一个新请求获得一个全新的缓存。

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

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

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

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

希望这能解释这一点。谁能给我指出正确的方向吗?
谢谢

如果您正在寻找进程间缓存,那么这很困难

但是,如果您不希望中间件绑定到System.Web,那么您可以编写一个接口库,作为中间件和System.Web之间的桥梁


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

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


至于使用非特定于web的缓存解决方案,我发现Microsoft缓存应用程序块非常健壮且易于使用。

我认为您可以在Velocity项目中获得好处


-有一篇简短的文章

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

见:


谢谢。我来看看MS缓存应用程序块。我们确实允许使用System.Web.Cache。但是,在每个请求中,我们需要从DB中提取一些东西,特别是在中间层。如果一个请求正在执行5个不同的操作,并且这些操作中的每一个都从DB加载同一个对象,那么我希望该对象从DB加载一次。我们有一组负载平衡的web服务器,因此在一个请求中多次从DB加载对象可能会加载不一致的数据。