Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用输出缓存以编程方式同时缓存一组页面_Asp.net Mvc_Caching_Azure_Outputcache - Fatal编程技术网

Asp.net mvc 使用输出缓存以编程方式同时缓存一组页面

Asp.net mvc 使用输出缓存以编程方式同时缓存一组页面,asp.net-mvc,caching,azure,outputcache,Asp.net Mvc,Caching,Azure,Outputcache,我有一个MVC4网站,我正在使用OutputCache缓存一个视图的结果,该视图显示多个页面的排名结果。缓存的输出因页面参数而异。排名是时间的函数,因此任何给定页面的结果都可能不同步,这取决于它们被缓存的时间,而我使用的是无限滚动机制,如果结果被推到下一页,则可以显示重复的结果,这一事实加剧了这种情况 这个问题的理想解决方案是一次性缓存一些合理数量的页面。这需要能够检查缓存输出是否过期,如果缓存结果过期,则重新生成缓存结果,然后返回缓存响应。这可能吗 我还应该注意,我正在与Azure输出缓存提供

我有一个MVC4网站,我正在使用OutputCache缓存一个视图的结果,该视图显示多个页面的排名结果。缓存的输出因页面参数而异。排名是时间的函数,因此任何给定页面的结果都可能不同步,这取决于它们被缓存的时间,而我使用的是无限滚动机制,如果结果被推到下一页,则可以显示重复的结果,这一事实加剧了这种情况

这个问题的理想解决方案是一次性缓存一些合理数量的页面。这需要能够检查缓存输出是否过期,如果缓存结果过期,则重新生成缓存结果,然后返回缓存响应。这可能吗

我还应该注意,我正在与Azure输出缓存提供程序一起使用OutputCaching,并且我有一个专用的缓存角色(注意:不是共享缓存服务)

任何帮助都将不胜感激

这需要能够检查缓存的输出是否正确 过期,如果缓存结果已过期,则重新生成缓存结果,然后 返回缓存的响应。这可能吗

这正是OutputCaching的工作原理-请求页面,如果页面存在于缓存中且未过期,则从缓存中检索它,否则,呈现页面并更新缓存

如果数据确实是动态的,那么缓存输出可能会导致更多的工作/问题,而没有实现任何性能提升(KISS适用于此处!如果可以避免问题,请不要为问题创建解决方案)

然而,如您所述(如果确实需要的话)构建解决方案可以通过Azure队列和工作者角色来完成。在添加/更新评级时,让评级引擎在队列中填充一个值。然后,让工作者角色每秒(例如)轮询队列以获取值。如果找到值,则会让工作者角色对缓存的页面执行web请求。如果输出缓存已过期,这将更新输出缓存。但是,您仍然受到缓存过期的限制。除非你做了类似的事情:

HttpResponse.RemoveOutputCacheItem()可能就是您想要的方法 使用。如果您能找出缓存操作的名称, 您可以只删除特定操作(尝试设置断点或 将缓存项的所有名称转储到屏幕)


我知道这就是OutputCaching的方式,但这都是在幕后完成的。就像我说的,为了翻页,比如说,10页没有重复结果的结果,所有10页都必须使用相同的结果集同时生成。