有多种方法可以利用ASP.Net MVC响应/输出缓存。最简单的是,您可以缓存一个对每个人都相同的简单页面:
[OutputCache(Duration=24*3600)] // cache 1 day
public ViewResult Index() ...
您可以根据具体的参数进行更改,您可以通过自定义密钥破解缓存。在所有这些情况下,声明性OutputCacheAttribute
用于确定页面是否应仅从缓存中提供。如果它确实从缓存服务,则Action不会触发 - 节省CPU时间。
因此,假设Action接受一个Id,这意味着它的内容会因id而异。假设您希望在基础数据发生变化时破坏特定ID的缓存。 MSDN说要在Action中设置VaryByCustom,而不是在OutputCacheAttribute
中以声明方式设置:
Response.Cache.SetVaryByCustom
像:
[OutputCache(Duration=24*3600, VaryByParam="id")]
public async Task<ViewResult> Thing(string id)
{
Response.Cache.SetVaryByCustom("thing-" + id);
// Some big load of work we'd like to avoid when a ton of visitors hit
// the server goes here.
所以...在每个场景中直到这个场景,如果页面在缓存中有效,则会跳过Action中的大量工作。但它出现在这里不是 - 除非SetVaryByCustom
可以中断行动?该命令如何正常工作?
如果它没有中断Action,是否有一些后续检查我可以看看缓存是否捡起它,所以我可以提前返回?我会回报什么,因为它通常期望整个页面充满数据?