IIS 7,三个绑定,我怎么能为他们做三个缓存?

时间:2012-11-23 15:49:37

标签: asp.net asp.net-mvc iis iis-7

有关IIS7设置的问题。我如何为每个绑定做一个缓存?例如,我有一个站点和三个绑定站点。我需要为三个绑定中的每一个创建三个不同的缓存。

2 个答案:

答案 0 :(得分:1)

使用Request.Host作为缓存密钥的一部分。

答案 1 :(得分:0)

如果您手动读取和写入缓存,则

usr的答案是正确的。但是,使用OutputCacheAttribute对缓存键的直接控制较少。

请注意,OutputCacheAttribute仍然依赖于其实现中的缓存键。在ASP.NET中,为每个缓存的项目分配一个用于查找它的键。

当您调用具有OutputCacheAttribute的控制器操作时,会根据您的请求生成缓存密钥;例如,如果您有一些VaryByParam个名称,则每个用户的缓存键可能不同。然后,您的Action返回的响应将存储在该键下的缓存中。

当下一个请求进入时,生成缓存密钥,我们检查缓存以查看该密钥下是否已存在缓存。如果是这样,我们就回来了;否则,我们继续行动。

我们可以通过在缓存键中包含主机名来为每个绑定设置不同的缓存。如果您正在使用OutputCacheAttribute,则可以覆盖它以允许主机更改缓存:

public override string GetVaryByCustomString(HttpContext context, string customVary)
{
    if(customVary == "Host")
    {
        return context.Request.Url.Host;
    }
    // other behaviors here if necessary
    return "";
}

这将允许动态修改缓存键以包含访问该站点的主机名。这意味着如果你有三个不同的绑定,你将有三个不同的缓存键(假设没有其他变化的参数)。

以下是修改Controller Action的方法:

[MyOutputCache(VaryByParam = "None", VaryByCustom = "Host", Duration = 7200)]
public ActionResult Index()
{
    // ...
    return View();
}

注意包含VaryByCustom = "Host",然后由您的覆盖OutputCacheAttribute的GetVaryByCustomString()方法看到,因此包含在使用的缓存键中。