有问题地使IIS输出缓存无效

时间:2015-12-25 18:31:19

标签: asp.net caching iis-7.5 outputcache

我的内容通常是从数据库派生的预呈现数据。所有页面加载一次并缓存。如果数据库中的数据发生更改,则某些页面的缓存应该无效。

有没有办法以编程方式重置IIS输出缓存,例如按一下按钮?

1 个答案:

答案 0 :(得分:1)

输出缓存有一些参数可用于处理缓存对象VaryByParamVaryByControlVaryByCustom

VaryByParam根据请求的参数缓存对象,例如查询字符串值,如果是POST / PostBack,则返回POST / PostBack值。

VaryByControl根据VaryByControl attibute中列出的控件的值缓存对象。

VaryByCustom是一种为缓存机制设置自定义逻辑的方法。这是一个关于它如何在您的场景中提供帮助的示例。

您正在缓存的页面和控件中使用以下指令。请注意VaryByParam="none"的使用。

<%@ OutputCache Duration="900" VaryByParam="none" VaryByCustom="somevariablename" %> 

Global.asax文件中添加以下功能:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg == "somevariablename")
    {
        return GetCustomCacheIdentifier();
    }
    return base.GetVaryByCustomString(context, arg);
}

每次页面或控件具有OutputCache指令时,都会触发此函数。当arg参数设置为您在VaryByCustom中设置的值时,您可以返回一些值。

如果值相同,IIS将返回页面的缓存版本,就像返回新值一样,页面将再次呈现。

例如,您可以返回最初设置为0的计数器,并在数据库发生更改时递增该计数器。