ASP.net-按查询字符串缓存(VaryByParam)

ASP.net-按查询字符串缓存(VaryByParam),asp.net,caching,query-string,outputcache,Asp.net,Caching,Query String,Outputcache,在哪些情况下,我们应该使用查询字符串(VaryByParam)在ASP.NET中实现缓存 有人能举一个关于web应用程序的实际情况的例子吗 Products.aspx?productID=12345 显然,您不希望Products.aspx的输出缓存中包含请求的第一个产品的数据 详细地 如果我点击Products.aspx?productID=12345页面将为我处理,查找产品12345的信息,并缓存结果。然后点击Products.aspx?productID=54321,页面将不会为您处理,

在哪些情况下,我们应该使用查询字符串(VaryByParam)在ASP.NET中实现缓存

有人能举一个关于web应用程序的实际情况的例子吗

Products.aspx?productID=12345
显然,您不希望Products.aspx的输出缓存中包含请求的第一个产品的数据

详细地
如果我点击
Products.aspx?productID=12345
页面将为我处理,查找产品12345的信息,并缓存结果。然后点击
Products.aspx?productID=54321
,页面将不会为您处理,但Products.aspx将从输出缓存中检索,您将看到12345的信息。不好的。VaryByParam解决了这个问题。

最经典的例子可能是:产品目录

它可能具有如下URL结构:

http://www.myshop.com/Catalog/ViewAllProducts.aspx

http://www.myshop.com/Catalog/ViewAllProducts.aspx?PageNum=123&PageSize=50

http://www.myshop.com/Catalog/ViewProduct.aspx?ProductID=12345
第一个URL是所有产品的完整列表。这里没有查询字符串,但是第二个URL是相同的页面,但是有分页。页码(PageNum)和每页项目数(PageSize)都是查询字符串,因此假设用户无法重新订购产品列表,则两个不同的用户请求:

http://www.myshop.com/Catalog/ViewAllProducts.aspx?PageNum=123&PageSize=50
URL将获得相同的信息。第一个请求可以缓存这些数据,以便以后的第二个请求不需要返回数据库来获取产品项(以及与之相关的详细信息:价格、说明等)以显示它们


第三个URL是一个产品详细信息屏幕,其中产品ID(可能是数据库中的唯一标识符)作为其单个querystring参数。对此的多个请求几乎总是需要返回相同的数据(除非该特定产品的价格或说明或某些其他元素频繁更改)。基于“ProductID”查询字符串(以及不同产品的值变化)的缓存将大大减少数据库的负载。如果实际后端数据库数据发生更改,确保缓存持续时间不会过长将确保缓存在合理的时间内过期。

如果要基于不同的参数缓存页面……您希望有多少唯一的查询字符串?我只在可能的变体数量较少时考虑VaryVyParam缓存(以防止过度缓存)@Mitch-Wheat,这个答案是这样的。。。问:加拿大在哪里?答:在地球上。(!!!!!!)@Mitch Wheat,为什么你有足够的信心投票结束这个话题?当然,你是对的。也许我是从另一个角度来理解这个问题,但我的问题是你真的想缓存这个页面吗?缓存中的页面可能和产品中的页面一样多,据我计算,可能多达12345页!)@库尔特:当然,这是一个你需要根据多种因素做出的决定。如果你的产品页面是非常数据库密集;您有足够的重复流量来缓存产品页面,并且您的web前端有32gb的内存,为什么不以25k的速度缓存100k产品页面呢?这还不到3gb的内存。