SetVaryByCustom如何工作?

时间:2015-07-21 22:14:05

标签: asp.net asp.net-mvc caching outputcache

有多种方法可以利用ASP.Net MVC响应/输出缓存。最简单的是,您可以缓存一个对每个人都相同的简单页面:

[OutputCache(Duration=24*3600)] // cache 1 day
public ViewResult Index() ...

您可以根据具体的参数进行更改,您可以通过自定义密钥破解缓存。在所有这些情况下,声明性OutputCacheAttribute用于确定页面是否应仅从缓存中提供。如果它确实从缓存服务,则Action不会触发 - 节省CPU时间。

因此,假设Action接受一个I​​d,这意味着它的内容会因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,是否有一些后续检查我可以看看缓存是否捡起它,所以我可以提前返回?我会回报什么,因为它通常期望整个页面充满数据?

0 个答案:

没有答案