7

我们正在运行一个使用 ASP.NET MVC 3 和 AppFabric 作为分布式缓存解决方案的大型站点构建。我们已经实现了一个自定义 OutputCacheAdapter 来使用我们的 AppFabric 集群。

我们看到 ASP.NET 为每个操作调用 OutputCacheProvider.Get() 方法,即使该操作没有使用 @OutputCacheAttribute 修饰。

如果您使用默认的 outputcacheprovider,这不是什么大问题,但是当您运行位于不同机器上的 outputcacheprovider 时,这不是什么大问题。

4

2 回答 2

4

根据设计,首先检查输出缓存是否有页面的缓存副本。如果有缓存副本,则将其返回,并且不再执行任何操作。特别是,没有控制器和控制器动作被派生、检查或执行。仅当页面未缓存时才会发生这种情况。

您将需要更改您的缓存提供程序,以便它可以快速确定是否可以缓存页面。只有当它是一个可缓存页面时,它才应该去检查分布式缓存。此检查不能基于,OutputCacheAttribute因为它们在请求处理的这一部分期间不可用。相反,必须使用 URL、cookie 和其他 HTML 标头信息进行快速检查。

于 2012-04-16T13:58:58.810 回答
1

您可以使用 Donut Cache outputcache 属性,该属性允许您为输出缓存键定义前缀。因此,如果缓存键以您自己的前缀开头,则在您的自定义提供程序中只需获取/设置缓存。

于 2017-04-14T04:15:26.253 回答