不同的服务器和ASP.NET 4.0中的客户端缓存策略

时间:2011-06-01 21:08:40

标签: asp.net outputcache duration

我对ASP.NET输出缓存缺乏一点基本了解。

在我的情况下,我的资源与VaryByCustom密钥紧密相关。在服务器端,我喜欢这些密钥无限期地缓存,直到密钥发生变化。这些缓存条目没有理由在计时器上清除。

然而,客户应该每小时检查一次,以获得服务器认为最新鲜的内容。

如果我将持续时间设置为1小时,我知道在客户端上正确设置过期标头。但它是否也驱逐了服务器端缓存?有没有办法确保响应保持缓存在服务器上,直到我的VaryByCustom更改,但仍然允许更频繁的客户端到期?

1 个答案:

答案 0 :(得分:0)

这里要注意的重要一点是,如果你的VaryByCustom发生了变化,asp.net会存储一个单独的缓存版本的页面。

因此,假设你的VaryByCustom-“custom1”持续时间=“60”,那么这将被缓存60秒。

如果你的VaryByCustom更改为“custom2”且持续时间=“60”,asp.net将在缓存中存储一​​个单独的副本,这与“custom1”的缓存不同,这个单独的版本将被缓存为60秒。

测试这个的简单方法是通过改变基于浏览器的VaryByCustom。

在Global.asax

public override string GetVaryByCustomString(HttpContext context, string custom)
        {
            if (custom == "browser")
            {
                string browserName;
                browserName = Context.Request.Browser.Browser;
                browserName += Context.Request.Browser.MajorVersion.ToString();

                return browserName;
            }
            else
            {
                return base.GetVaryByCustomString(context, custom);
            }

        }

.aspx的

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebFormsPlayGround._Default" %>
    <%@ OutputCache Duration="40" VaryByParam="None" VaryByCustom="browser" %>

页面加载

protected void Page_Load(object sender, EventArgs e)
        {
            lblTime.Text = "The time now is: <br/>";
            lblTime.Text += DateTime.Now.ToString();
        }

我没有在aspx中包含asp:Label的标记,但我希望你能得到一般的想法。