我对ASP.NET输出缓存缺乏一点基本了解。
在我的情况下,我的资源与VaryByCustom
密钥紧密相关。在服务器端,我喜欢这些密钥无限期地缓存,直到密钥发生变化。这些缓存条目没有理由在计时器上清除。
然而,客户应该每小时检查一次,以获得服务器认为最新鲜的内容。
如果我将持续时间设置为1小时,我知道在客户端上正确设置过期标头。但它是否也驱逐了服务器端缓存?有没有办法确保响应保持缓存在服务器上,直到我的VaryByCustom更改,但仍然允许更频繁的客户端到期?
答案 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的标记,但我希望你能得到一般的想法。